Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate sql查询_Java_Sql_Hibernate - Fatal编程技术网

Java hibernate sql查询

Java hibernate sql查询,java,sql,hibernate,Java,Sql,Hibernate,我对hibernate sql查询有一个奇怪的问题: db关系如下所示: registration has one invoicerecipient registration has many attendees 我有一个invoicerecipient的persid,所以在以下两种情况下我都应该获得相关的注册,但只有第二种情况有效。有人知道为什么第一个案子不起作用吗 select distinct registration from Registration registration, in

我对hibernate sql查询有一个奇怪的问题:

db关系如下所示:

registration has one invoicerecipient
registration has many attendees
我有一个invoicerecipient的persid,所以在以下两种情况下我都应该获得相关的注册,但只有第二种情况有效。有人知道为什么第一个案子不起作用吗

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

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

正确的解决方案是从您拥有的对象行走结构:

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

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

根据Aaron Digulla的回答(registration.Attendes.id),我不知道Hibernate是否允许在where子句中隐式引用集合。JPA规范不允许这样做。这是有道理的。registration.getAttendes().getId()在Java语言中是非法的

但您可以根据以下内容比较参考:

select distinct registration from Registration registration, in(registration.attendees) atts where atts = :anotherAttendee or registration.invoicerecipient.id = :persid
(registration.Attendes)中的通知类似于内部加入registration.Attendes。因此,注册至少需要一名与会者,atts.id=:persid应该与Aaron Digulla所说的类型相同


关于,

谢谢,就是这样,此时Attendes集合是空的,所以它不起作用。这两个语句都是有效的JPA查询语言。见评论。