- PR -

Hibernate 結合マッピングが存在しないクラス同士のJoin方法

投稿者投稿内容
yellowfd3s
会議室デビュー日: 2005/02/16
投稿数: 15
投稿日時: 2005-02-16 13:26
お世話になります。
現在O/RマッピングツールのHibernateを利用したアプリケーションの開発を行っています。
連載:Hibernateで理解するO/Rマッピング(5)のPage2に該当記事を見つけましたが、
HQLが記述されているだけで具体的なコーディングがありません。
どのようにコーディングすれば記事にあるようなListを取得できるのでしょうか?
検索はしたのですが見つけることができませんでした。

環境
 JDK:1.4.2_07
 DB:Oracle8i(8.1.7)
 Tomcat:5.0.28
 Hibernate:2.1.8
 SpringFramework:1.1.4
abby
会議室デビュー日: 2005/02/18
投稿数: 13
投稿日時: 2005-02-18 16:13
こんにちは。

Hibernate 結合マッピングが存在しないクラス同士のJoin方法 の題名と違ってしまいますが、
結合マッピングを指定する方法ではだめなのでしょうか?
yellowfd3s
会議室デビュー日: 2005/02/16
投稿数: 15
投稿日時: 2005-02-18 18:28
abby様、ありがとうございます。

テーブルに制約の定義をできないので、結合マッピングができないと思いました。
制約がなくても結合マッピングが可能なのでしょうか?
サンプルを見ながら作業をしているのでまだまだ勉強不足です。
よろしくお願いします。
すえぞう
会議室デビュー日: 2004/08/11
投稿数: 9
投稿日時: 2005-02-19 21:18
こんにちは。

オブジェクトAとオブジェクトBを結合したい場合は、
from A,B
where A.a = B.b
and A.c = B.d

のようにSQLと同じ記述ができます。

この場合、Listの要素はObject[]になります。
yellowfd3s
会議室デビュー日: 2005/02/16
投稿数: 15
投稿日時: 2005-02-20 00:57
すえぞう様、ありがとうございます。
このHQLで取得するコーディングは具体的にどのようにするのでしょうか?
SessionFactoryからSessionを取得してfindメソッドで取得すればよいのでしょうか?
やりたいことはLeft Joinです。
以上、よろしくお願いします。

すえぞう
会議室デビュー日: 2004/08/11
投稿数: 9
投稿日時: 2005-02-20 10:25
Queryクラスを使用します。

left join をするにはDBがオラクルの場合、

Query q = session.createQuery("from A,B where A.a = B.b (+)");
List list = q.list();

この場合のListの要素はObject[]で、
Object[0]はクラスA
Object[1]はクラスB
になります。
yellowfd3s
会議室デビュー日: 2005/02/16
投稿数: 15
投稿日時: 2005-02-21 11:48
すえぞう様、ありがとうございます。
Queryクラスを使用して取得することができました。

もう1つ質問なのですが、DBによってJOINの記述方法が違うのでしょうか?
連載:Hibernateで理解するO/Rマッピング(5)のPage2
http://www.atmarkit.co.jp/fjava/rensai3/ormap05/ormap05_2.html
には次のようになっていました。(MySQLの場合)
From package.ClassA as clA right outer join
package.ClassB as clB
Where clA.objID = clB.objID

よろしくお願いします。
abby
会議室デビュー日: 2005/02/18
投稿数: 13
投稿日時: 2005-02-22 10:16
yellowfd3sさん、こんにちは。

テーブルに制約の定義をできないというのは、どういうことでしょうか??

私は自分で勉強しているので、正しい方法はよくわかりませんが、
http://www.atmarkit.co.jp/fjava/rensai3/ormap05/ormap05_1.html
私は↑を参考にマッピングをすることができました。

私はなるべく、HQLは自分で書かないというのを趣旨でやっているので。

スキルアップ/キャリアアップ(JOB@IT)