2

这是例外 - pastebin

Caused by: java.sql.SQLException: Unknown Parameter: 13
    at com.google.cloud.sql.jdbc.ParameterMetadata.getParameterType(ParameterMetadata.java:45)
    at org.hibernate.type.EnumType.nullSafeSet(EnumType.java:121)
    at org.hibernate.type.CustomType.nullSafeSet(CustomType.java:155)
    at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2705)
    at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2682)
    at org.hibernate.persister.entity.AbstractEntityPersister$4.bindValues(AbstractEntityPersister.java:2863)
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)
    ... 111 more

枚举在我的休眠映射中-

<property name="userStatus" column="user_status" insert="true" update="true" index="true">
  <type name="org.hibernate.type.EnumType">
    <param name="enumClass">com.tutorial.enums.UserStatus</param>
    <param name="type">12</param>
  </type>
</property>
<property name="userType" column="user_type" insert="true" update="true" index="true">
  <type name="org.hibernate.type.EnumType">
    <param name="enumClass">com.tutorial.enums.UserType</param>
    <param name="type">12</param>
  </type>
</property>

我的实体有 UserType 和 UserStatus 作为枚举。Hibernate 无法正确转换枚举。我是否应该切换回休眠 3,因为在另一个项目中(使用休眠 3)我有自己的自定义类型并且它工作得很好。我现在正在使用休眠 4.1.7。

4

1 回答 1

2

添加

<param name="useNamed"></param>

它应该可以正常工作。

<property name="userType" column="user_type" insert="true" update="true" index="true">
   <type name="org.hibernate.type.EnumType">
     <param name="enumClass">com.tutorial.enums.UserType</param>
     <param name="type">12</param>
     <param name="useNamed"></param>
   </type>
</property>

编辑:

<param name="useNamed"></param>

必须在那里,但是如果您将其留空,则枚举将被序列化为序数,如果您在数据库上进行手动工作,这不是很有帮助,所以如果您想获取名称,那么它必须是

 <param name="useNamed">true</param>
于 2012-11-05T22:33:34.077 回答