2017-08-24 61 views
0

我射击的HQL加入查询休眠的createQuery结果集映射(春季启动)

@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。我该用什么?

+0

[将Hibernate查询结果映射到自定义类的可能的重复?](https://stackoverflow.com/questions/37420401/mapping-hibernate-query-results-to-custom-class) –

+0

该解决方案是为Native Native定义的,而不是HQL。 –

+0

我认为如果您使用HQL,您可以直接填充您的自定义对象。试试这个:(List )query.getResultList(); – Afridi

回答

0

有很多方法在你的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);