[ORM][Hibernate] 関連のないテーブルの結合

複数のテーブルからデータを取得する場合のパフォーマンス対策として利用されるテーブル結合。
Hibernateでは、マッピング・ファイルでのJOINの設定や、HQLのfrom句でのJOIN指定により、結合を行うのが一般的。
ただし、これでは、Hibernateは永続オブジェクトの関連をたどって結合を行うため、関連のないオブジェクト間の結合は不可。

解決策は2つ。


HQLのwhere句に結合条件を記述する方法。
例えば、関連のない2つのテーブル(TABLE_A、TABLE_B)と、それに対応した永続クラス(EntityA、EntityB)がある。ここで、テーブルTABLE_AのフィールドID_AとテーブルTABLE_B のフィールドID_Bとの間で結合を行うものとして、それに対応するクラスEntityAのプロパティがidA、クラスEntityBのプロパティが idBだとする。その場合、結合を行うためのHQL文は、以下のようになる。
from EntityA a, EntityB b where a.idA = b.idB


ネイティブSQLクエリを用いて、結合を行うためのSELECT文を直接記述するという方法。
例えば、上記の例において結合を行うためのSELECT文は、以下のようになる(以下は、RDBMSにMySQLを用いる場合)。
SELECT * FROM TABLE_A TA, TABLE_B TB WHERE TA.ID_A = TB.ID_B

また、ネイティブSQLクエリを用いると、HQLでは使えないfrom句でのJOIN指定も利用できる(以下参照)。
SELECT * FROM TABLE_A TA JOIN TABLE_B TB ON TA.ID_A = TB.ID_B


いずれの場合も、戻り値となるListオブジェクトには、オブジェクト型の配列(Object[])が格納される。上記の場合であれば、EntityAとEntityBの両オブジェクトが格納された配列が検索結果の行数分だけ返される。

ref:
http://www.itarchitect.jp/enterprise/-/49469-4.html

tag : ORM Hibernate join

2007-05-15 00:10 : 開発 : コメント : 0 : トラックバック : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

search

ad



counter


tag cloud

category cloud