문제

Nhibernate를 처음 접하고 기존 솔루션을 수정 하여이 ORM을 사용합니다. 이상적으로는 스토리지 구조 및 객체 클래스는 동일하게 유지해야하므로 하나 또는 두 개의 매핑 문제를 발견합니다.

한 클래스 '돈'에는 가치와 통화가 있습니다. 값은 이중이며 통화는 통화 목록 테이블의 외국 키입니다.

돈은 많은 객체/테이블에서 유형으로 나타날 수 있으므로 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-enterface-to-nhibernate--part-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