Hibernate:group by&有标准

时间:2018-06-05 13:51:14

标签: java hibernate orm hibernate-criteria

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

  • Ticket
  • TicketEntry

每个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;

提前致谢

1 个答案:

答案 0 :(得分:1)

根据您的帖子,我将假设您的实体模型类似于以下

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

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

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

  @ManyToOne
  private Ticket ticket;
}

如果您希望使用Hibernate Criteria API,可以使用以下方法执行此操作:

Restrictions.sizeEq( "entries", 1 )

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

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

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

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