Java:JPQL select语句

时间:2010-05-24 23:12:35

标签: java orm select jpa jpql

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例外

还有其他人遇到过类似行为吗?

2 个答案:

答案 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,所以这是未经测试的,未经证实且没有退款保证。)