当Hibernate查询中有多个bean别名时,列表的返回类型是什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当Hibernate查询中有多个bean别名时,列表的返回类型是什么?相关的知识,希望对你有一定的参考价值。

有一个Hibernate查询:

@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;

}

那么在<>里写什么东西呢?

答案

如果您保持查询原样,您将获得一个对象数组列表:List<Object[]>

数组的零索引将保存Pta实例,第一个索引将保存ClassPta实例。

在这种情况下,您必须手动打开该结果集。

有一种方法可以通过使用Result类来自动化该过程:

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别名时,列表的返回类型是什么?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 hibernate 在不同的 JVM 实例中为相同的查询创建不同的列别名?

记录使用Hibernate查询bean中字段和数据库列类型不匹配问题

当 bean 类与一对多注释链接时,使用 hibernate 在 db 上选择查询:

如何定义游标,当我们在两个表之间有一个公共列而不给出别名时

在查询中使用别名时出现“#1054 - 未知列”错误?

PHP/MySQL:在没有别名的联接查询中获取多个同名列? [复制]