Java Hibernate投影作为对象返回结果
我想在hibernate中使用投影编写以下sqlJava Hibernate投影作为对象返回结果,java,sql,hibernate,postgresql,Java,Sql,Hibernate,Postgresql,我想在hibernate中使用投影编写以下sql SELECT id, name, MAX(ver) FROM bizterm WHERE name ILIKE '%AB%' GROUP BY name, id order by name asc 我已经编写了以下代码 Session session=sessionFactory.getCurrentSession(); Criteria criteria=session.createCriteria(BizT
SELECT id, name, MAX(ver)
FROM bizterm
WHERE name ILIKE '%AB%'
GROUP BY name, id order by name asc
我已经编写了以下代码
Session session=sessionFactory.getCurrentSession();
Criteria criteria=session.createCriteria(BizTerm.class);
criteria.add(Restrictions.ilike("name", searchString,MatchMode.ANYWHERE));
criteria.addOrder(Order.asc("name"));
ProjectionList projList=Projections.projectionList();
projList.add(Projections.max("ver"));
projList.add(Projections.groupProperty("id"));
projList.add(Projections.groupProperty("name"));
criteria.setProjection(projList);
在表id中,ver是PKEY。
此查询运行正常,但结果中我只得到3列的值,即ver、id、name,也作为对象,还有其他列,如BizTerm表中的status、level,这些值在结果集中不会返回。我如何使用投影得到这些?我尝试了projList.add(Projections.property(“status”)代码>但它不工作。
我希望执行此查询
SELECT id, name,status,level MAX(ver)
FROM bizterm
WHERE name ILIKE '%AB%'
GROUP BY name, id order by name asc using projection in hibernate
你是这样做的……现在它的工作没有错误
Criteria criteria=session.createCriteria(BizTerm.class);
criteria.add(Restrictions.ilike("bizTermName", searchString,MatchMode.ANYWHERE));
criteria.addOrder(Order.asc("bizTermName"));
ProjectionList projList=Projections.projectionList();
projList.add(Projections.max("bizTermversion"));
projList.add(Projections.groupProperty("bizTermId"));
projList.add(Projections.groupProperty("bizTermName"));
projList.add(Projections.max("status"));
projList.add(Projections.max("levels"));
projList.add(Projections.max("createDate"));
projList.add(Projections.max("modifyDate"));
注意:我不需要状态、级别、createDate、modifyDate的最大值,但如果我没有在max函数中写入它们,则会出现以下错误
[Error Code: 0, SQL State: 42803] : column "levels" must appear in the GROUP BY clause or be used in an aggregate function
使用max功能,一切似乎都很好