java - SQL 语句转换为 hibernate 标准(具有 count 子句)

标签 java sql hibernate criteria having

我有一个 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/

相关文章:

java - Android - AutoCompleteTextView onClick 给出错误

java - 使用 mvel 检查列表中是否存在元素

mysql - 与 MySQL 中尾随空格的比较

java - Hibernate 模板更新 hql 中不断出现错误

database - 我如何才能学会对数据库性能做出现实的假设?

java - JAX-RS 的默认字符编码是什么?

java - 如何在 Retrofit2 中正确处理重定向作为响应

mysql - 如何从两个表中选择数据,其中一个表包含多个带有ID的列

mysql - SQL:从只有column2不同的两列中选择不同的

java - 使用 @SecondaryTable 注解映射实体 Spring Hibernate