我想在hibernate
中使用投影编写以下sqlSELECT 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也是Object,还有其他列如状态,BizTerm表中的级别结果集中没有返回这些值。我怎样才能使用投影?我试过了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
答案 0 :(得分:1)
喜欢这个..现在它的工作没有错误
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函数似乎一切都很好