2009-10-30 2 views
0

다음 매핑을 가지고, many-to-one 속성 'Message'는 'RootMessage'클래스에 상응하는 일대 다 연관을 갖는다.NHibernate many-to-one 연관이로드를 거부한다

<class name="IMessageReceipt" lazy="false" table="MessageReceipts" abstract="true"> 

     <id name="Id"> 
      <generator class="guid.comb"></generator> 
     </id> 

     <discriminator column="Discriminator"/> 
     <property name="Address" /> 
     <property name="Status" /> 
     <property name="MarkedAsDeleted" /> 

     <many-to-one name="Message" column="MessageId" class="RootMessage" 
       not-found="ignore"/> 

     <subclass name="MessageReceipt" lazy="false" discriminator-value="1"> 
     </subclass> 

    </class> 

여기에, (I 얻을 모두가 NULL) 기준 API를 사용하여 쿼리의 예입니다 때 연결로드 거부 (many-to-one) 일 :

  List<IMessageReceipt> list; 
     using (var tx = Session.BeginTransaction()) 
     { 
      var criteria = Session.CreateCriteria(typeof (IMessageReceipt)); 
      criteria.Add(Restrictions.Eq("Address", address)); 
      criteria.Add(Restrictions.Eq("Status", status)); 
      criteria.SetFirstResult(0); 
      criteria.SetMaxResults(quantity); 
      list = criteria.List<IMessageReceipt>().ToList(); 
      tx.Commit(); 
     } 
     return list; 

어떤 아이디어?

답변

1

그래, 거의 하루 만에 나는 해결책이있다. NHibernate는 사이의 매핑을 가지고 있더라도 두 엔티티 간의 양방향 연결을 자동으로 가정하지 않습니다. 지속하기 전에 코드에서 연관을 반드시 선언해야합니다. 따라서 :

<set name="Receipts" inverse="true" cascade="save-update"> 
<key column="MessageId"></key> 
<one-to-many class="IMessageReceipt"/> 
</set> 
:

message.Receipts = receipts; 
foreach (var receipt in receipts) 
{ 
    receipt.Message = message; 
} 
Session.Save(message); 
tx.Commit(); 

또한 역 = "true"를 수집 부재 측에 적용되어야

관련 문제