select x from X x where x.a.id = :a_id
- >始终选择0个对象
为什么上面的JPQL语句不起作用,但下面的工作呢?
select a from A a where a.id = :a_id
- > a_obj
select x from X x where x.a = :a_obj
- >始终纠正所选对象的数量
两个查询都不会在执行期间抛出异常,但会获得不同数量的结果。
由于
更新
我通过使用连接尝试了以下查询:
select x from X x, x.a a where x.a.id = :a_id
- >意外令牌的TopLink例外
并且:
select x from X x JOIN x.a a where a.id = :a_id
- >始终纠正所选对象的数量
使用后一个查询,我已经解决了手头的初始问题。但是,现在我有两个查询应该可以工作,但由于某种原因没有。
select x from X x where x.a.id = :a_id
- >始终选择0个对象
select x from X x, x.a a where x.a.id = :a_id
- >意外令牌的TopLink例外
还有其他人遇到过类似行为吗?
答案 0 :(得分:1)
使用以下X实体
@Entity
public class EntityX {
@Id @GeneratedValue
private Long id;
@OneToOne
private EntityA a;
// ...
}
这个是A:
@Entity
public class EntityA {
@Id @GeneratedValue
private Long id;
//...
}
以下JPQL查询:
from EntityX x where x.a.id = :id
生成以下SQL:
select
entityx0_.id as id282_,
entityx0_.a_id as a2_282_
from
EntityX entityx0_
where
entityx0_.a_id=?
它只是起作用并返回尽可能多的结果。
使用Hibernate(和EclipseLink)测试。如果这不能代表您的情况,请添加更多详细信息。
答案 1 :(得分:0)
我认为您还必须在第一个示例中引入实体a,以便它的属性可见。
像
这样的东西select x from X x join fetch x.a where x.a.id = :a_id
(我不使用JPA,我坚持使用HQL,所以这是未经测试的,未经证实且没有退款保证。)