Hibernate:分组依据和标准
Hibernate: group by & having 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;
提前致谢
根据您的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()
函数测试集合的大小。
在这两种情况下,这里的假设是 sizeEq
和 size()
应用到的查询的根是父 Ticket
以满足您想要的所有 Ticket
只有 1
个条目。
我的数据库中有以下实体:
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;
提前致谢
根据您的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()
函数测试集合的大小。
在这两种情况下,这里的假设是 sizeEq
和 size()
应用到的查询的根是父 Ticket
以满足您想要的所有 Ticket
只有 1
个条目。