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->選択されたオブジェクトの数を常に修正する

後者のクエリで、私は目前の最初の問題を解決しました。ただし、機能するはずのクエリが2つありますが、何らかの理由で機能しません。

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 に答える