2013-04-13 198 views
58

我有一个类别休眠模式:映射枚举的字符串休眠

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

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

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

其中有一个字符串类型字段。此外,我有一个Java枚举代表类型的类型:

public enum CategoryType { 
    INCOME, OUTCOME; 
} 

我想使用,而不是字符串类型。 SQL在varchar参数中接受两个不同的值:CategoryIncomeCategoryOutcome。我希望Category模型类接受一个枚举变量 - 并且在hibernate请求它时将它映射到字符串。

可能吗?

+0

尝试[this](http://blog.javachap.com/index.php/enumeration-mapping-in-hibernate/)。 –

回答

117

是的,有可能。它应该是:

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

你甚至可以走得更远,现在,当JPA 2.1发布时,使用'@Converter(autoApply = true)public class CategoryTypeConverter implements javax.persistence.AttributeConverter ' – membersound

+3

对于任何可能有相同问题的人.. :我不得不把这个注释放到我的getter方法而不是字段中,像这样:@Enumerated(EnumType.STRING)public CategoryType getCategoryType(){return this.categoryType; }'。 – ZeroOne

+0

我在'hibernate.ddl-auto = update'模式下,我不得不放弃我的表,让hibernate再次创建它,以便将我的enum从int转换为varchar。希望它可以帮助有类似问题的人。 – Arashsoft