Hibernate:映射枚举属性类型的问题

时间:2014-06-27 19:05:02

标签: java hibernate enums

遵循此tutorial中提到的每个步骤,但仍然遇到以下异常:

Caused by: org.hibernate.MappingException: Unable to instantiate custom type: org.hibernate.type.EnumType

Caused by: java.lang.NullPointerException
    at org.hibernate.type.EnumType.setParameterValues(EnumType.java:203) [hibernate-core-4.2.0.Final.jar:4.2.0.Final]
    at org.hibernate.type.TypeFactory.injectParameters(TypeFactory.java:131) [hibernate-core-4.2.0.Final.jar:4.2.0.Final]

第2部分

然后我尝试使用@Enumerated本身。将hbm更改为<property name="gender" column="usr_gender" not-null="true" type="org.hibernate.type.EnumType">

实体类:

import javax.persistence.Enumerated;
import javax.persistence.EnumType;
    @Enumerated(EnumType.STRING)
       Gender gender

仍然遇到同样的错误。

第3部分

将hbm属性更新为<property name="gender" column="usr_gender" not-null="true" type="string">
保持实体类相同。 回到过去的错误。 Expected type: Gender, actual value: java.lang.String

hbm文件

<property name="shortName" column="short_name" type="string" not-null="true"/>
<property name="description" column="description" type="string" not-null="true"/>
<property name="gender" column="gender_type" not-null="true" type="string"/>

实体类

import javax.persistence.Enumerated;
import javax.persistence.EnumType;

private String shortName;
private String description;
@Enumerated(EnumType.STRING)
private Tenant tenant;

1 个答案:

答案 0 :(得分:0)

当我尝试为我的枚举字段创建自定义类型以将其作为SQLQuery的addScalar()方法的类型参数时,我得到了相同的异常。目前尚不清楚代码的哪一部分会引发异常。但是,您似乎正在尝试创建一个自定义类型来克服异常,因为结果转换的枚举的setter方法参数不匹配。请参阅我对Hibernate SQL transformation fails for Enum type field的回答。