- PR -

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

投稿者投稿内容
yellowfd3s
会議室デビュー日: 2005/02/16
投稿数: 15
投稿日時: 2005-02-23 10:39
abby様、こんにちは。

テーブルに制約の定義をできない理由は、下記の通りです。
マスタテーブルのメンテナンスはメインフレームのバッチ処理で行っています。
その結果を固定長テキストファイルでダウンロードして、SQL*LoaderのREPLACEで
ORACLEに取り込みます。
この為、制約を定義するとデータ取り込み時、エラーとなってしまいます。
以上です。

私も、HQLは自分で書かないという趣旨でやりたいのですが。。。
abby
会議室デビュー日: 2005/02/18
投稿数: 13
投稿日時: 2005-02-23 11:42
yellowfd3sさん、こんにちは。

なるほど。
私はまだ実務にはHibernateを使用してないのでそこまで頭が回りませんでした。

ということは、現在yellowfd3sさんは、xmlファイルにもテーブルの定義をしないでHibernateを使用しているということですか?

私が今動かしている感じでは、DBの制約とxmlで定義するHibernateの制約は同期はとっていないようなので、xml側だけで結合条件を定義してやれば、HQLは書かなくてもいけると思います。

もし見当違いな文でしたらすいません。
yellowfd3s
会議室デビュー日: 2005/02/16
投稿数: 15
投稿日時: 2005-02-23 12:04
abby様、こんにちは。

xmlファイルとは***.hbm.xmlですか?
このファイルはmiddlegen-2.1を使用して作成しました。
よって、テーブルの定義はしてあると思います。
こういう事ですか?

> DBの制約とxmlで定義するHibernateの制約は同期はとっていないようなので、
> xml側だけで結合条件を定義してやれば、HQLは書かなくてもいけると思います。
こちらは時間を見つけて試して見ます。
どなたか経験があれば情報をお願いします。
abby
会議室デビュー日: 2005/02/18
投稿数: 13
投稿日時: 2005-02-23 13:46
そうです。私のいっているxmlは***.hbm.xmlのことです。
ツールを使って***.hbm.xmlを作成していたのですね。

私は***.hbm.xmlを自分で書いているので、middlegen-2.1を使うと、
どのような***.hbm.xmlが作成されるのかわからないので、お力になれそうにありません。。

ただ、先ほどいったように、DBに制約がなくてもxmlの定義だけで、
私は結合が出来ているのでいけるかと思います。
HQLを手書きにしてしまうとHibernateを入れている意味がなくなってしまいますからね。

しかし、すべてxmlで結合できるかと聞かれると
私は複合キーなどがからむ等、複雑な結合はやっていないので、
何ともいえませんが。。


yellowfd3s
会議室デビュー日: 2005/02/16
投稿数: 15
投稿日時: 2005-02-23 16:06
abby様、ありがとうございます。

大変重要なアドバイスを頂きました。

ちなみに、middlegen-2.1で作成したマッピングファイル(***.hbm.xml)は、
http://www.atmarkit.co.jp/fjava/rensai3/ormap05/ormap05_1.html
で、説明されているものと同じです。
おかもと
大ベテラン
会議室デビュー日: 2003/06/08
投稿数: 182
投稿日時: 2005-02-28 00:16
引用:

もう1つ質問なのですが、DBによってJOINの記述方法が違うのでしょうか?
お願いします。



どんなDBを使っても基本的には同じです。Oracleを使うからと言って
Oracleの方言で記述していたらHibernateを入れている意味が無いです。

DB方言を使わないといけないのはHQLで対応していない関数を
使う場合等です。
おかもと
大ベテラン
会議室デビュー日: 2003/06/08
投稿数: 182
投稿日時: 2005-02-28 00:22
引用:

HQLを手書きにしてしまうとHibernateを入れている意味がなくなってしまいますからね。

しかし、すべてxmlで結合できるかと聞かれると
私は複合キーなどがからむ等、複雑な結合はやっていないので、
何ともいえませんが。。




やはり実際の開発で使用するとなるとHQLを書かないわけには行かないですよ。
さらに、HQLでは解決できないところはSQLを書く羽目になりJDBCのみで
作成したアプリケーションよりも保守が大変になります・・・。
yellowfd3s
会議室デビュー日: 2005/02/16
投稿数: 15
投稿日時: 2005-03-01 11:05
おかもと様、ありがとうございます。
昨日まで、風邪でダウンしていましたので返信が遅れました。

おっしゃる通りDBごとに記述していたらHibernateを入れている意味が無いですね。
そこで質問なのですが、HQLでJOINの記述は一般的にどのようにするのでしょうか?

連載:Hibernateで理解するO/Rマッピング(5)のPage2のように記述すると
エラーとなってしまいました。
http://www.atmarkit.co.jp/fjava/rensai3/ormap05/ormap05_2.html

 From package.ClassA as clA right outer join
 package.ClassB as clB
 Where clA.objID = clB.objID

よろしくお願いします。

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