我的数据库中有以下实体:
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;
提前致谢
答案 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()
函数测试集合的大小。
在这两种情况下,这里的假设是sizeEq
和size()
被应用的查询的根是父Ticket
,以满足您想要的所有Ticket
只有1
条目的{1}}。