休止状態:数式を使用した多対 1
-
22-09-2019 - |
質問
誰かが答えを見つけるのを手伝ってくれることを願っています。
レガシーデータベースを使用していますが、他のアプリが既存のテーブルに依存しているため、既存のテーブルを変更できません。
既存の主要なテーブルが 3 つあります。 A、B、C.
A には B を参照する列があります (多対 1 の関係)。問題は、B ではなく C との関係を持たなければならないことです。そこで、*-1 マッピング BC を作成しました。
Tables: A,B,C,BC (all have ID field)
A-B many to one
B-C many to one through BC
Needed:A-C without altering A,B or C
B または BC の Java エンティティは必要ありません。A と C だけを必要とします。A にはフィールド A.c が必要です。
これまでのところ、@Formula アノテーションを使用しようとしましたが無駄でした。
class A{
@ManyToOne
@Formula(value="select BC.c from BC where BC.b = b")
private C c;
}
これにより、次の SQL が生成されます。
select this_.c_ID from A this_
テーブル A には列 c_ID がないため、明らかに失敗します (式が完全に無視されるのはなぜですか?)。
@ManyToOne アノテーションを削除すると、以下が生成されます。
select (select BC.c from BC where BC.b = this_.b) as formula_0 from A this_
Hibernate が BINARY 値 (クラス C ? のシリアル化) を期待し、受け取った Integer をキャストするときに例外をスローすることを除けば、これは完璧です。
この ID は遅延読み込みには十分なはずですが、そのようにするにはどうすればよいでしょうか?@ManyToOne を使用すると、式が壊れます。
A、B、C テーブルを変更したり、Java クラス B または BC を作成したりせずに、A-C リンクを実現するにはどうすればよいですか?
情報をありがとう、 ダン
解決
サウンド使用して非常にこのバグのような、残念ながらありません修正準備注釈、あなたががそれらのクラスのXMLマッピングファイルでの作業それを得るかもしれないようです。
他のヒント
これは Hibernate 3.5.0-Beta-2+ で動作するはずです (HHH-4382 修正されました)。