【问题标题】:Hibernate createQuery resultset Mapping(Spring boot)Hibernate createQuery 结果集映射(Spring boot)
【发布时间】:2017-08-24 11:32:47
【问题描述】:

我正在触发 HQL Join 查询

@Override
public List<Object> getCourseIdWithStatus(int courseId, String status) {

    String queryString = "select sc.courseId, sc.name, sct.streamId from Course "
            + "sc join CoursesTypeInformation sct ON(sc.courseId = sct.courseId)"
            + " where sc.courseId = ?1 and sc.status = ?2 and sct.status = ?3";
    Query query = entityManager.createQuery(queryString);
    query.setParameter(1, courseId);
    query.setParameter(2, status);
    query.setParameter(3, status);
    return (List<Object>)query.getResultList();
}

这是一个 HQL 查询而不是原生 SQL

现在我有一个 pojo 类

public class BasicData {

    private int courseId;

    private String name;

    private int streamId;

    .. setters and getters

}

我想将查询结果映射到 POJO。我应该使用什么?

【问题讨论】:

  • 解决方案是为 Native SQL 而不是 HQL 定义的。
  • 如果您使用 HQL,我认为您可以直接填充您的自定义对象。试试这个: (List)query.getResultList();
  • 试过了,不工作 java.lang.ClassCastException: [Ljava.lang.Object;无法转换为 com.domain.customDTO.BasicData

标签: java hibernate spring-boot


【解决方案1】:

有很多方法可以实现这一点,其中之一是在您的 POJO 类中创建构造函数 这是我的代码中的一些示例:

POJO:

@Entity
@Table(name="TBL_KCT_SPL_STOCK_DTL")
public class TblKctSplStockDtl implements Serializable{
   ...
   public TblKctSplStockDtl(String reclaim, BigDecimal){ 
    this.reclaim = reclaim;
    this.tonnage = tonnage;
   }
  ...
} 

HQL:

String hql = "select new TblKctSplStockDtl(t.reclaim, sum(t.tonnage)) from TblKctSplStockDtl t "
            + "where t.idStock = :idStock and t.state = 'IN' "
            + "group by t.reclaim ";

Query q = sessionFactory.getCurrentSession().createQuery(hql);

【讨论】:

    猜你喜欢
    • 2011-03-17
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 2021-06-28
    • 2018-07-11
    相关资源
    最近更新 更多