2017-05-16 24 views
0

私はHibernateを学んでいます。私はHQLクエリ内でJOIN句をどのように使用しているのだろうかと思います。私は間違っているかもしれませんが、あなたはいつも一緒にいなくてもいいようです。Hibernate HQL:JOINは本当に必要ですか?

私はChildClassエンティティに、ParentClassとの@ManyToOne関係がマップされているとします。あなたは私が親クラスのidフィールドで結果をフィルタリングすることができ見ることができるように子クラスからアクセス、

session.createQuery("FROM ChildClass ch WHERE ch.parentClass.id=1L") 

は今、私はこのようなHQLクエリーを構築することができますch.parentClass.idを

私はSQLで同じことをやってみたかった場合、私は、JOINを実行する必要があるだろう、とクエリは、次のようになります。

SELECT * FROM ChildTable ch 
JOIN ParentTable p ON (ch.parent_id = p.id) 
WHERE p.id=1; 

私はこれがまっすぐになった場合は、HQLに私はしないでください含める必要がある@ManyToOneのマップされた関係が暗黙的に2つのエンティティに結合するため、クエリ内の任意のJOINを返します。なぜHQLクエリでJOINを使用するのですか? JOINが必要な状況がありますか?

答えて

2

明示的に参加を指定すると、あなたは、例えば、マッピングとは異なる参加型を指定したい

  1. に有用であるいくつかの状況があります。インナーとアウトアー。
  2. アソシエーションに参加するだけでなく、クエリ結果にアソシエーションもフェッチするようにしたい場合、結合フェッチのシナリオを指定します。
関連する問題