我正在使用枚举,我想将枚举主体中的代码存储在数据库中。我正在使用休眠5.2.11。对于实体映射,我正在使用.hbm.xml文件。我做错了什么?为什么我不能存储enmus代码。它一直存储枚举名称或字节数组。 MyEntity.java public class MyEntity { private Long id; private MyEnums num; public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Convert(converter = MyEnumConverter.class) public MyEnums getNum() { return num; } @Convert(converter = MyEnumConverter.class) public void setNum(MyEnums num) { this.num = num; } }使用这个实体,我正在设置枚举,并且我希望该休眠存储枚举主体中的代码。 MyEnums.java public enum MyEnums { FIRST("123", "first"), SECOND("456", "second"); private final String code; private final String description; private MyEnums(String code, String description) { this.code = code; this.description = description; } public static MyEnums fromCode(String code) { if (code.equals(FIRST.code)) { return FIRST; } else if (code.equals(SECOND.code)) { return SECOND; } else { return null; } } public String getCode() { return code; } public String getDescription() { return description; } }使用MyEnums类逻辑,我可以从枚举主体获取代码或描述。要将代码存储到数据库中,我正在使用AttributeConverter 。 MyEnumConverter.java @Converter(autoApply = true) public class MyEnumConverter implements AttributeConverter<MyEnums, String> { @Override public String convertToDatabaseColumn(MyEnums myEnums) { return (myEnums != null)? myEnums.getCode() : null; } @Override public MyEnums convertToEntityAttribute(String code) { return (code != null)? MyEnums.fromCode(code) : null; } }正如我所说的,我正在使用.hbm.xml映射。所以我尝试了两种不同的方式来映射我的枚举类型。当我使用1-ST注释时-数据库存储bytea类型值。当我使用第二注解时-数据库在枚举类中存储枚举名称或位置编号。 MyEntity.hbm.xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="main.test.main.MyEntity" table="test_enums"> <id name="id" column="id"> <generator class="org.hibernate.id.enhanced.SequenceStyleGenerator"> <param name="optimizer">none</param> <param name="increment_size">1</param> <param name="sequence_name">seq_enums</param> </generator> </id> <!-- 1-ST ANNOTATION --> <property name="num" column="enum_code"/> <!-- 2-ND ANNOTATION --> <!--<property name="num" column="enum_code"> <type name="org.hibernate.type.EnumType"> <param name="enumClass">main.test.main.MyEnums</param> </type> </property>--> </class> </hibernate-mapping>当我使用1st注释数据库表时,如下所示:----------------------------------| id | enum_code |----------------------------------| 1 | 81B 00000000 AC ED 00 ... |----------------------------------当我使用第二注释表时,如下所示:----------------------------------| id | enum_code |----------------------------------| 1 | SECOND |----------------------------------或像这样:----------------------------------| id | enum_code |----------------------------------| 1 | 1 |----------------------------------看来我的枚举转换器不起作用。是否有人遇到过此类问题?我真的需要一些帮助 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 我认为休眠状态正在考虑该领域,而忽略getter / setter,尝试为该领域添加注释...public class MyEntity { private Long id; @Convert(converter = MyEnumConverter.class) private MyEnums num; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public MyEnums getNum() { return num; } public void setNum(MyEnums num) { this.num = num; }} (adsbygoogle = window.adsbygoogle || []).push({});
08-25 14:06