Java hibernate sql查询
我对hibernate sql查询有一个奇怪的问题: db关系如下所示: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
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查询语言。见评论。