当 Hibernate 查询中有多个 bean 别名时,列表的返回类型是啥?
Posted
技术标签:
【中文标题】当 Hibernate 查询中有多个 bean 别名时,列表的返回类型是啥?【英文标题】:What is the return type of a list when there is more than one bean alias in the Hibernate query?当 Hibernate 查询中有多个 bean 别名时,列表的返回类型是什么? 【发布时间】:2017-03-25 12:19:39 【问题描述】:有一个休眠查询:
@Override
@Transactional
public List<> getClassificationOfPta()
String hql = "select p , c from Pta p join p.classePta c where c.niveau = 2 order by p.creation";
Session sessionDynamic = Utils.createDynamicSession(env);
Query query = sessionDynamic.createQuery(hql);
@SuppressWarnings("unchecked")
List<> list = (List<>) query.list();
sessionDynamic.close();
return list;
那么在<>
里面写什么?
【问题讨论】:
【参考方案1】:如果您保持原样查询,您将获得对象数组列表:List<Object[]>
。
数组的零索引将保存 Pta 实例,第一个索引将保存 ClassPta 实例。
在这种情况下,您必须手动解开该结果集。
有一种方法可以通过使用结果类来自动化该过程:
package com.myapp;
public class Result
private Pta pta;
private ClassPta classPta;
public (Pta pta, ClassPta classPta)
this.pta = pta;
this.classPta = classPta;
那么您需要按如下方式更改查询和事务方法实现:
@Transactional
public List<Result> getClassificationOfPta()
String hql = "select new com.myapp.Result(p as pta, c as classPta)
from Pta p join p.classePta c where c.niveau = 2 order by p.creation";
Session sessionDynamic = Utils.createDynamicSession(env);
Query query = sessionDynamic.createQuery(hql);
List<Result> list = (List<Result>) query.list();
sessionDynamic.close();
return list;
当然,第二种方法更干净,但你的电话是你的。
【讨论】:
以上是关于当 Hibernate 查询中有多个 bean 别名时,列表的返回类型是啥?的主要内容,如果未能解决你的问题,请参考以下文章
当 bean 类与一对多注释链接时,使用 hibernate 在 db 上选择查询:
记录使用Hibernate查询bean中字段和数据库列类型不匹配问题