繁体   English   中英

休眠SQL查询

[英]hibernate sql query

我有一个休眠的SQL查询一个奇怪的问题:

数据库关系如下:

registration has one invoicerecipient
registration has many attendees

我有一个发票接收者的特权,因此在以下两种情况下我都应该获得相关的注册,但是只有第二种情况有效。 有人知道为什么第一种情况不起作用吗?

select distinct registration from Registration registration, in(registration.attendees) atts where atts.id = :persid or registration.invoicerecipient.id = :persid

select distinct registration from Registration registration where registration.invoicerecipient.id = :persid

我不知道Hibernate是否根据Aaron Digulla的答案(registration.attendees.id)在where子句中允许隐式集合引用。 JPA规范不允许这样做。 这说得通。 registration.getAttendees()。getId()在Java语言中是非法的。

但是您可以根据以下条件比较参考:

select distinct registration from Registration registration, in(registration.attendees) atts where atts = :anotherAttendee or registration.invoicerecipient.id = :persid

注意IN(registration.attendees)与INNER JOIN registration.attendees相似。 因此,注册至少需要一个参与者,并且atts.id =:persid应该与Aaron Digulla所说的类型相同。

问候,

您只能在from部分中使用类型。 什么是“ , in(registration.attendees) atts ”,应该是什么?

正确的解决方案是从具有的对象中遍历结构:

select distinct registration
from Registration registration
where registration.attendees.id = :persid
   or registration.invoicerecipient.id = :persid

Hibernate知道registration.attendees是一个集合,因此它将为您生成必要的子选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM