- - PR -
Hibernate 結合マッピングが存在しないクラス同士のJoin方法
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-02-23 10:39
abby様、こんにちは。
テーブルに制約の定義をできない理由は、下記の通りです。 マスタテーブルのメンテナンスはメインフレームのバッチ処理で行っています。 その結果を固定長テキストファイルでダウンロードして、SQL*LoaderのREPLACEで ORACLEに取り込みます。 この為、制約を定義するとデータ取り込み時、エラーとなってしまいます。 以上です。 私も、HQLは自分で書かないという趣旨でやりたいのですが。。。 | ||||
|
投稿日時: 2005-02-23 11:42
yellowfd3sさん、こんにちは。
なるほど。 私はまだ実務にはHibernateを使用してないのでそこまで頭が回りませんでした。 ということは、現在yellowfd3sさんは、xmlファイルにもテーブルの定義をしないでHibernateを使用しているということですか? 私が今動かしている感じでは、DBの制約とxmlで定義するHibernateの制約は同期はとっていないようなので、xml側だけで結合条件を定義してやれば、HQLは書かなくてもいけると思います。 もし見当違いな文でしたらすいません。 | ||||
|
投稿日時: 2005-02-23 12:04
abby様、こんにちは。
xmlファイルとは***.hbm.xmlですか? このファイルはmiddlegen-2.1を使用して作成しました。 よって、テーブルの定義はしてあると思います。 こういう事ですか? > DBの制約とxmlで定義するHibernateの制約は同期はとっていないようなので、 > xml側だけで結合条件を定義してやれば、HQLは書かなくてもいけると思います。 こちらは時間を見つけて試して見ます。 どなたか経験があれば情報をお願いします。 | ||||
|
投稿日時: 2005-02-23 13:46
そうです。私のいっているxmlは***.hbm.xmlのことです。
ツールを使って***.hbm.xmlを作成していたのですね。 私は***.hbm.xmlを自分で書いているので、middlegen-2.1を使うと、 どのような***.hbm.xmlが作成されるのかわからないので、お力になれそうにありません。。 ただ、先ほどいったように、DBに制約がなくてもxmlの定義だけで、 私は結合が出来ているのでいけるかと思います。 HQLを手書きにしてしまうとHibernateを入れている意味がなくなってしまいますからね。 しかし、すべてxmlで結合できるかと聞かれると 私は複合キーなどがからむ等、複雑な結合はやっていないので、 何ともいえませんが。。 | ||||
|
投稿日時: 2005-02-23 16:06
abby様、ありがとうございます。
大変重要なアドバイスを頂きました。 ちなみに、middlegen-2.1で作成したマッピングファイル(***.hbm.xml)は、 http://www.atmarkit.co.jp/fjava/rensai3/ormap05/ormap05_1.html で、説明されているものと同じです。 | ||||
|
投稿日時: 2005-02-28 00:16
どんなDBを使っても基本的には同じです。Oracleを使うからと言って Oracleの方言で記述していたらHibernateを入れている意味が無いです。 DB方言を使わないといけないのはHQLで対応していない関数を 使う場合等です。 | ||||
|
投稿日時: 2005-02-28 00:22
やはり実際の開発で使用するとなるとHQLを書かないわけには行かないですよ。 さらに、HQLでは解決できないところはSQLを書く羽目になりJDBCのみで 作成したアプリケーションよりも保守が大変になります・・・。 | ||||
|
投稿日時: 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 よろしくお願いします。 |