質問

NHibernate は初めてですが、この ORM を使用するように既存のソリューションを変更しているので学習しています。理想的には、ストレージ構造とオブジェクト クラスは同じままである必要があるため、マッピングの問題が 1 つまたは 2 つ発生しました。

1 つのクラス「お金」には価値と通貨があります。値は double で、通貨は通貨リスト テーブルの外部キーです。

お金は多くのオブジェクト/テーブルのタイプとして現れる可能性があるため、通貨への標準マッピングとともにそれをマッピングする CompositeUserType を作成しました。これは正常に機能しますが、私は一生、NHibernate からの遅延ロードに通貨関係を取得できません。私たちは流暢な言語を使用していますが、hbm に関するご指摘をお待ちしております。

役に立ちましたか?

解決

コンポーネントを使用する必要があるようですが、コンポーネントまたは CompositeUserTypes からの参照を追加する方法がわかりません:/

https://forum.hibernate.org/viewtopic.php?f=1&t=947719&start=0

https://web.archive.org/web/20090227235136/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/08/13/a-fluent-interface-to-nhibernate---パート-2- --value.aspx

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;
}

これが推奨される方法かどうかはわかりませんが、うまくいきます:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top