我有一个 SQL 查询,我想将其转换为一个条件 (Hibernate 3.3.2),以便将其用于我的持久层。 这就是查询:
select last_name
from member
where
member.end_date > SYSDATE
group by member.last_name
having count(member.last_name) >1;
我已经尝试了很多组合,但没有结果对我有好处......这是我的代码:
Criteria criteria = getSession(false).createCriteria(Member.ENTITY_NAME);
criteria.setProjection(Projections.projectionList()
.add(Projections.groupProperty("lastName"))
.add(Projections.count("lastName").as("cptLastName"))
);
criteria.add(Restrictions.ge("endDate", now))
.add(Restrictions.le("startDate", now))
//.add(Restrictions.gt("cptLastName", new Integer(1)))
.addOrder(Order.asc("lastName"))
;
通过使用注释行编写它,我有一个对象列表,其中包含名称以及该名称在数据库中出现的次数。但是当我想对其进行注释时,出现以下错误: java.sql.SQLException:ORA-00904:“Y1_”:无效标识符
为了开发此代码,我受到以下不同帖子的启发:
我想我离解决方案不远了,但是有人可以帮助我吗? 如果您有疑问,请随时问我。 如果您找到了另一种解决方法供我粘贴到此查询中,请毫不犹豫地提出...
最佳答案
您好,如果我是对的,您现在无法在 hibernate 条件中直接使用having子句计数,请在下面找到修改后的查询。如果不起作用,请发布整个堆栈跟踪
DetachedCriteria innerQuery = DetachedCriteria.forClass(Member.ENTITY_NAME, "inner");
innerQuery.setProjection(Projections.rowCount());
innerQuery.add(Restrictions.eqProperty("lastName", "outer.lastName"));
Criteria c = s.createCriteria(Member.ENTITY_NAME, "outer");
c.setProjection(Projections.property("lastName"));
c.add(Restrictions.gt("endDate", now))
c.add(Subqueries.eq(new Integer(1), innerQuery));
关于java - SQL 语句转换为 hibernate 标准(具有 count 子句),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12258272/