对于Enum字段类型,Hibernate SQL转换失败

我正在使用SQL查询,然后使用Hibernates的转换结果Transformers.aliasToBean()。我的查询中的一列是枚举。对于枚举,转换以某种方式失败了。我该怎么办?我应该使用哪种数据类型?我想要多个字符将结果转换为我的枚举类型。

这是我的查询/代码的简化版本的样子( 是表配置文件中的枚举):

session.createSQLQuery("select a, b from profiles").setResultTransformer(Transformers.aliasToBean(Profile.class))

.list();

例外情况: expected type: Foo.ProfileStateEnum, actual value: java.lang.Character

回答:

假设与列b对应的Java枚举类型为Foo.ProfileStateEnum,则以下代码段将为您工作。(我使用Hibernate 4.1.6进行了测试)

import java.util.Properties;

import org.hibernate.type.Type;

import org.hibernate.type.IntegerType;

import org.hibernate.internal.TypeLocatorImpl.TypeLocatorImpl;

import org.hibernate.type.TypeResolver.TypeResolver;

import org.hibernate.type.EnumType;

Properties params = new Properties();

params.put("enumClass", "Foo.ProfileStateEnum");

params.put("type", "12"); /*type 12 instructs to use the String representation of enum value*/

/*If you are using Hibernate 5.x then try:

params.put("useNamed", true);*/

Type myEnumType = new TypeLocatorImpl(new TypeResolver()).custom(EnumType.class, params);

List<Profile> profileList= getSession().createSQLQuery("select a as ID, b from profiles")

.addScalar("ID", IntegerType.INSTANCE)

.addScalar("b", myEnumType )

.setResultTransformer(Transformers.aliasToBean(Profile.class))

.list();

以上是 对于Enum字段类型,Hibernate SQL转换失败 的全部内容, 来源链接: utcz.com/qa/422144.html

回到顶部