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

标签 sql hibernate enums hql transformation

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

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

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

异常:预期类型:Foo.ProfileStateEnum,实际值: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();

关于sql - Hibernate SQL 转换对于 Enum 字段类型失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9633337/

相关文章:

javascript - TS |元素隐式具有 'any' 类型,因为类型 'string' 的表达式不能用于索引类型 'Record<SecurityMode, boolean>'

sql - 如何在ETL中测试增量数据

sql - postgres 从函数返回 json

java - Web表单提交未进入数据库

c++ - 枚举、类、命名空间和长名称

C++ 轻松使用枚举进行标志和位运算

sql - 将表变量插入到具有多列(ID、数字等)的临时表中

java - 为什么我的实体不能与 SpringBoot 一起工作,尽管它可以在没有 SpringBoot 的情况下工作

java - 使用 JAVA 和 JPA 1.0 对 DB2 进行大量更新或插入

java - Hibernate 查询实体名称