Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠:将字符串反序列化为值_Java_Hibernate_Enums - Fatal编程技术网

Java 休眠:将字符串反序列化为值

Java 休眠:将字符串反序列化为值,java,hibernate,enums,Java,Hibernate,Enums,我在数据库中有一个字符串,它对应于枚举的字符串值。我想告诉Hibernate,这个字符串应该被视为来自enum类的值。比如打电话 MyEnum.valueOf(stringName); 如何在HibernateXML映射文件中实现这一点 现在我有这个: <class name="com.example.SomeObject" table="some_object"> <id name="id" column="id" /> <property n

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

 MyEnum.valueOf(stringName);
如何在HibernateXML映射文件中实现这一点

现在我有这个:

<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)
错误11-03 08:07:54458-Servlet示例的Servlet.service()引发异常
java.io.StreamCorruptedException:无效的流头:494E5445
位于java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:804)
位于java.io.ObjectInputStream。(ObjectInputStream.java:299)
位于org.hibernate.util.SerializationHelper$CustomObjectInputStream。(SerializationHelper.java:223)
位于org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:180)
位于org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:211)
位于org.hibernate.type.SerializableType.fromBytes(SerializableType.java:105)
位于org.hibernate.type.SerializableType.get(SerializableType.java:62)
位于org.hibernate.type.NullableType.nullablesafeget(NullableType.java:184)
位于org.hibernate.type.NullableType.nullablesafeget(NullableType.java:173)
位于org.hibernate.type.AbstractType.hydroge(AbstractType.java:105)
位于org.hibernate.persister.entity.AbstractEntityPersister.hydroge(AbstractEntityPersister.java:2124)
位于org.hibernate.loader.loader.loadFromResultSet(loader.java:1404)
位于org.hibernate.loader.loader.instanceNotYetLoaded(loader.java:1332)
位于org.hibernate.loader.loader.getRow(loader.java:1230)
位于org.hibernate.loader.loader.getRowFromResultSet(loader.java:603)
位于org.hibernate.loader.loader.doQuery(loader.java:724)
在org.hibernate.loader.loader.doQueryAndInitializeNonLazyCollections(loader.java:259)上
位于org.hibernate.loader.loader.doList(loader.java:2228)
位于org.hibernate.loader.loader.listIgnoreQueryCache(loader.java:2125)
位于org.hibernate.loader.loader.list(loader.java:2120)
位于org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
位于org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
位于org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
位于org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
位于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>

com.example.SomeEnum

然后枚举进入一个out by string值。

我想这可能是非注释等价物。另外,这是关于所需的特定于xml的声明,而不是包装类。