2013-04-13 17 views
58

Mam kategorię hibernacji model:mapowania enum ciąg w hibernacji

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

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

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

które mają pole ciąg typu. Mam również wyliczenie Java, które reprezentuje typ kategorii:

public enum CategoryType { 
    INCOME, OUTCOME; 
} 

, które chciałbym użyć zamiast typu ciągu. SQL przyjmuje dwie różne wartości w parametrze varchar: albo CategoryIncome lub CategoryOutcome. Chciałbym, aby klasa modelu klasy akceptowała zmienną wyliczeniową - i odwzorowywała ją w jakiś sposób na łańcuch, gdy hibernacja go prosi.

Czy to możliwe?

+0

Wypróbuj [this] (http://blog.javachap.com/index.php/enumeration-mapping-in-hibernate/). –

Odpowiedz

117

Tak, jest to możliwe. Powinno być:

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

Możesz nawet pójść dalej, a teraz, gdy zostanie wydany JPA 2.1, użyj '@Converter (autoApply = true) public class CategoryTypeConverter implementuje javax.persistence.AttributeConverter ' – membersound

+3

Dla każdego, kto może mieć ten sam problem .. : Musiałem umieścić tę adnotację w mojej metodzie gettera zamiast w polu, tak jak to: '@Enumerated (EnumType.STRING) public CategoryType getCategoryType() {return this.categoryType; } '. – ZeroOne

+0

Byłem w trybie 'hibernate.ddl-auto = update' i musiałem upuścić mój stół i pozwolić hibernacji utworzyć go ponownie, aby przekonwertować moje wyliczenie z int na varchar. Mam nadzieję, że pomoże to komuś z podobnym problemem. – Arashsoft

Powiązane problemy