一直以来我们需要查询几张表数据时用的都是在数据库中新建视图来完成,最近在项目中遇到了同样的问题;于是突发奇想,能不能在查询中返回个map,这样岂不是不用新建视图了;皇天不负有心人,经过在网上查询,终于查到了在HQL中可以new对象。
写此博客是为了记录,避免以后忘记
- hql代码如下
public List<ArticleInfo> getArticlePage(int start, int limit,
List<FilterBean> filterList) {
String hql = "select new ArticleInfo(article, column.name) "
+ "from ArticleInfo article, ColumnInfo column where 1 = 1 "
+ "and article.columnId = column.id ";
hql = super.setFilterBean(filterList, hql);
hql = super.orderBy(hql, "article.createDate desc");
Query query = super.createQuery(filterList, hql);
query.setFirstResult(start);
query.setMaxResults(limit);
return query.list();
}
- 实体类Entity代码
注:
实体类必须要有一个空的构造函数,如图片中标注;
否则会报如下错误:
2018-03-24 20:58:59,384 [org.hibernate.event.internal.DefaultLoadEventListener] INFO HHH000327: Error performing load command : org.hibernate.InstantiationException: No default constructor for entity: com.dxr.cms.entity.ArticleInfo