Hibernate:分组依据和标准

Hibernate: group by & having criteria

我的数据库中有以下实体:

每个 TicketEntry 引用一个 Ticket 并且 1 Ticket 有 0 个或多个票条目。我想弄清楚如何检索所有具有 1 TicketEntry 的票证。我已经将 SQL 脚本放在一起,但我不知道如何将其转换为 Hibernate Criteria Restrictions。

SELECT ticket_id FROM ticket_entries
GROUP BY ticket_id
HAVING count(ticket_id) = 1;

提前致谢

根据您的post,我假设您的实体模型类似于以下内容

@Entity
public class Ticket {
  /* other attributes */

  @OneToMany(mappedBy = "ticket")
  private List<TicketEntry> entries;
}

@Entity
public class TicketEntry {
  /* other attributes */

  @ManyToOne
  private Ticket ticket;
}

如果您希望使用 Hibernate 标准 API,您可以使用:

Restrictions.sizeEq( "entries", 1 )

您可以使用 Hibernate HQL 执行此操作,如下所示

SELECT t FROM Ticket t WHERE size(t.entries) = 1

HQL中的特殊size()函数测试集合的大小。

在这两种情况下,这里的假设是 sizeEqsize() 应用到的查询的根是父 Ticket 以满足您想要的所有 Ticket 只有 1 个条目。