Hibernate マッピング:多対 1 の UserType
-
12-09-2019 - |
質問
NHibernate は初めてですが、この ORM を使用するように既存のソリューションを変更しているので学習しています。理想的には、ストレージ構造とオブジェクト クラスは同じままである必要があるため、マッピングの問題が 1 つまたは 2 つ発生しました。
1 つのクラス「お金」には価値と通貨があります。値は double で、通貨は通貨リスト テーブルの外部キーです。
お金は多くのオブジェクト/テーブルのタイプとして現れる可能性があるため、通貨への標準マッピングとともにそれをマッピングする CompositeUserType を作成しました。これは正常に機能しますが、私は一生、NHibernate からの遅延ロードに通貨関係を取得できません。私たちは流暢な言語を使用していますが、hbm に関するご指摘をお待ちしております。
解決
コンポーネントを使用する必要があるようですが、コンポーネントまたは CompositeUserTypes からの参照を追加する方法がわかりません:/
https://forum.hibernate.org/viewtopic.php?f=1&t=947719&start=0
http://wiki.fluentnhibernate.org/show/StandardMappingComponents
アップデート
CompositeUserType を使用し、NullSafeGet() メソッドを実行しているエンティティにプロキシ エンドポイントを設定することで、この問題を回避しました。
public virtual object NullSafeGet(IDataReader dr, string[] names, ISessionImplementor session, object owner)
{
if (dr == null)
{
return null;
}
Money value = new Money()
{
Value = (double)NHibernateUtil.Double.NullSafeGet(dr, names[0], session, owner)
};
string entityName = session.BestGuessEntityName(value.Currency);
value.Currency = (CurrencyDetails)session.InternalLoad(entityName, (object)DEFAULT_CURRENCY_ID, false, false);
return value;
}
これが推奨される方法かどうかはわかりませんが、うまくいきます:)
所属していません StackOverflow