java - Hibernate:将字符串反序列化为值

标签 java hibernate enums

我在数据库中有一个与枚举的字符串值相对应的字符串。我想告诉 Hibernate 这个字符串应该被视为来自枚举类的值。比如打电话

 MyEnum.valueOf(stringName);

如何在我的 hibernate xml 映射文件中执行此操作?

现在我有这个:

<class name="com.example.SomeObject" table="some_object">
    <id name="id" column="id" />
    <property name="someEnum" column="value"/>
</class>

但我不相信这是有效的,我怀疑可能与此堆栈跟踪有关

ERROR 11-03 08:07:54,458 -Servlet.service() for servlet example threw exception
java.io.StreamCorruptedException: invalid stream header: 494E5445
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:804)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
at org.hibernate.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:223)
at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:180)
at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:211)
at org.hibernate.type.SerializableType.fromBytes(SerializableType.java:105)
at org.hibernate.type.SerializableType.get(SerializableType.java:62)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:184)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:173)
at org.hibernate.type.AbstractType.hydrate(AbstractType.java:105)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2124)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1404)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1332)
at org.hibernate.loader.Loader.getRow(Loader.java:1230)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:603)
at org.hibernate.loader.Loader.doQuery(Loader.java:724)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
at org.hibernate.loader.Loader.doList(Loader.java:2228)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
at org.hibernate.loader.Loader.list(Loader.java:2120)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)

最佳答案

答案:

<property name="someEnum" column="columnName">
    <type name="org.hibernate.type.EnumType">
        <param name="enumClass">com.example.SomeEnum</param>
    </type>
</property>

然后枚举按字符串值输入输出。

关于java - Hibernate:将字符串反序列化为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22330633/

相关文章:

Java Graphics2D drawImage() 和 clip() : how to apply antialiasing?

java - 为什么 Hibernate 将我的批量插入分成 3 个查询

java - 如何实现gwt的嵌套 Activity

java - Android Maven 目录结构

java - @JsonIgnore 不忽略hibernate Entity中的字段

spring - 如何在Hibernate HQL中按字母顺序排序结果?

java - 为什么 myEnum.ONE 不等于 myEnum.ONE.toString()?

c++ - 如何使用枚举变量作为模板参数?

c# - 将嵌套结构从 C# 编码到 C++ DLL

java - sbt 更新时未检测到 Java 安装