Iva*_*vov 1 java alias hibernate nativequery
我想要实现的是在以下列方式定义的查询上设置结果转换器:
String hqlQueryString = "select o.id as id, o.name as objectName from MyObject";
Class resultClass = MyObject.class;
Query query = session.createQuery(hqlQueryString).setResultTransformer(
new new AliasToBeanResultTransformer(resultClass));
List result = query.list();
Run Code Online (Sandbox Code Playgroud)
MyObject看起来像这样:
public class MyObject {
private int id;
private String objectName;
public int getId() {
return id;
}
public void setId(int value) {
this.id = value;
}
public String getObjectName() {
return objectName;
}
public void setobjectName(String value) {
this.objectName = value;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,虽然我已指定id并objectName成为我的别名,但正在执行的实际查询使用不同的别名.这导致我AliasToBeanResultTransformer无法构造,MyObject因为别名与属性名称不匹配.
是否有可能以编程方式获取hibernate生成的查询的别名(我可以将它们设置为bean结果转换器的别名)?我尝试使用query.getReturnAliases()但它返回我在HQL中定义的别名,而不是Hibernate实际使用的别名.
我可以在createQuery语句中明确指定别名吗?目前我试图不使用标准来工作,所以我很欣赏使用查询对象的方法,如果存在的话.
更新
虽然上述问题对于标准HQL查询(请参阅注释)无效,但在执行本机查询时它是有效的.具体而言 - 本机查询似乎将所有别名视为低位字符串(尽管可能在查询中引入了特定的大小写).AliasToBeanResultTransformer在资本化很重要的情况下,这会导致在设置属性时失败.
实际上不需要实现另一个 AliasToBeanResultTransformer,您可以使用addScalar(String columnAlias,Type type)显式别名本机SQL的列:
String nativeSQL = "select o.id as id, o.name as objectName from MyObject";
List<MyObject> resultList = session.createSQLQuery(nativeSQL)
.addScalar("id" ,StandardBasicTypes.INTEGER)
.addScalar("objectName",StandardBasicTypes.STRING)
.setResultTransformer(new AliasToBeanResultTransformer(MyObject.class))
.list();
Run Code Online (Sandbox Code Playgroud)
然后变换器将查找一个MyObject类并期望它具有setter setId()并且setObjectName()为了将返回的值填充到MyObject 实例中
| 归档时间: |
|
| 查看次数: |
10076 次 |
| 最近记录: |