[英]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.