1

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 异常

有没有其他人遇到过类似的行为?

4

2 回答 2

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)进行测试。如果这不能代表您的情况,请添加更多详细信息。

于 2010-05-24T23:38:15.573 回答
0

我认为您还必须在第一个示例中引入实体 a 以便它的属性可见。

就像是

select x from X x join fetch x.a where x.a.id = :a_id

(我不使用 JPA,我坚持使用 HQL,所以这是未经测试、未经证实且没有退款保证的。)

于 2010-05-24T23:37:25.340 回答