TJ-*_*TJ- 8 sql enums hibernate hql transformation
我正在使用SQL查询,然后使用Hibernates转换结果Transformers.aliasToBean().我的查询中的一列是枚举.这种转变在某种程度上失败了.我该怎么办?我应该使用哪种数据类型?我想要超过1个字符将结果转换为我的枚举类型.
这就是我的查询/代码的简化版本的样子(b是表格配置文件中的枚举):
session.createSQLQuery("select a, b from profiles").setResultTransformer(Transformers.aliasToBean(Profile.class))
.list();
Run Code Online (Sandbox Code Playgroud)
例外: expected type: Foo.ProfileStateEnum, actual value: java.lang.Character
gun*_*mel 12
假设对应于列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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6215 次 |
| 最近记录: |