0

我想在休眠中使用投影编写以下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(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、名称也为 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
4

1 回答 1

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"));

注意:我不需要最大状态、级别、创建日期、修改日期,但如果我没有在 max 函数中编写它们,则会出现以下错误

[Error Code: 0, SQL State: 42803]  : column "levels" must appear in the GROUP BY clause or be used in an aggregate function

使用 max 功能一切似乎都很好

于 2012-05-22T10:30:01.217 回答