2013-04-13 17 views
58

ho una Categoria Hibernate modello:Mapping enum a stringa in ibernazione

@Entity 
@Table(name = "category") 
public class Category { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name = "id") 
    private long id; 

    @Column(name = "type") 
    private String type; 

che hanno un campo di stringa tipo. Inoltre ho un enum Java che rappresenta un tipo di una categoria:

public enum CategoryType { 
    INCOME, OUTCOME; 
} 

che vorrei utilizzare al posto del tipo di stringa. L'SQL accetta due valori distinti nel parametro varchar: CategoryIncome o CategoryOutcome. Vorrei che la classe del modello Categoria accettasse una variabile enum e la mappasse in qualche modo sulla stringa ogni volta che Hibernate lo chiedesse.

È possibile?

+0

Prova [questo] (http://blog.javachap.com/index.php/enumeration-mapping-in-hibernate/). –

risposta

117

Sì, è possibile. Dovrebbe essere:

@Enumerated(EnumType.STRING) 
@Column(name = "category_type") 
private CategoryType categoryType; 
+11

Puoi anche andare oltre e, ora che è rilasciato JPA 2.1, usa '@Converter (autoApply = true) classe pubblica CategoryTypeConverter implementa javax.persistence.AttributeConverter ' – membersound

+3

Per chiunque possa avere lo stesso problema .. : Ho dovuto inserire questa annotazione nel mio metodo getter invece del campo, in questo modo: '@Enumerated (EnumType.STRING) publicTipoType getCategoryType() {return this.categoryType; } '. – ZeroOne

+0

Ero in modalità 'hibernate.ddl-auto = update' e ho dovuto abbandonare la mia tabella e lasciare che Hibernate lo crea di nuovo per convertire il mio enum da int a varchar. Speriamo che aiuti qualcuno con problemi simili. – Arashsoft