2009-07-13 6 views
1

새 하위를 추가하려고 할 때 문제가되는 세 가지 클래스가 있습니다.NHibernate 및 하위 컬렉션에 복합 컬렉션이있는 새 항목을 추가하는 중

그들은 다음과 같습니다

User { 
     List attributesGroup> 
} 

AttributesGroup { 
    attributesGroupId 
    value 
} 

AttributesGroupId { 
    attrName 
    userId 
} 

매핑은 다음과 같습니다

<class name="AlternativeUserAttributes" table="`AlternativeUserAttributes`" lazy="true"> 
    <composite-id name="Id" class="Data.Entities.AlternativeUserAttributesId"> 
     <key-property name="AttributeName" column="`attributeName`" type="string" /> 
     <key-many-to-one name="User" class="Entities.User" column="`userId`" /> 
    </composite-id> 
    <property name="AttributeValue" column="`attributeValue`" type="string" /> 
    <many-to-one name="User" column="`userId`" cascade="none" not-null="true" /> 
    </class> 
나는에 항목을 추가 할 을하려고 할 때 그러나, 문제없이 사용자 클래스의 항목 및 클래스 SaveUpdate을 제거 할 수 있습니다

수령 :

AlternativeUserAttributes aua = new AlternativeUserAttributes(); 
      aua.Id = new AlternativeUserAttributesId(); 
      aua.Id.AttributeName = name; 
      aua.Id.User = curUser; 
      aua.AttributeValue = value; 
      aua.User = curUser; 

     curUser.AlternativeUserAttributes.Add(aua); 

행 개수가 e 건 오류가 발생합니다. 1이 될 것으로 예상했지만 0이었고 저장을 사용하여 AlternateUserAttributes 만 자체 저장하려고하면이 오류가 발생합니다. 색인이 범위를 벗어났습니다. 음수가 아니어야하며 콜렉션의 크기보다 작아야합니다. 매개 변수 이름 : 인덱스

두 시도 모두 새 항목에 대한 INSERT를 사용하고 있지만 이러한 오류가 계속 발생합니다. 도움을 줄 수있는 사람이 있습니까?

+0

저장되지 않은 값을 설정하면 다음 오류를 반환합니다. System.ArgumentOutOfRangeException : 인덱스가 범위를 벗어났습니다. 음수가 아니어야하며 콜렉션의 크기보다 작아야합니다. – monksy

답변

1

저장되지 않은 값을 any로 설정하고 양방향성을 제거하여이 문제를 해결했습니다.

1

나는 (게시물을 맹 글링하여) 다음과 같은 어려움을 겪고 있지만 복합 ID를 사용하면이 문제가 발생할 수 있습니다. ID 타입이 'assigned'이기 때문에 NHibernate는 객체가 일시적인지 영속성인지를 알 수 없다.

https://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/example-parentchild.html

자세한 내용은 섹션 17.4로 이동합니다.

하나의 해결 방법은 버전 또는 타임 스탬프 필드를 사용하는 것입니다. 지속성을 추적하고 인터셉터를 사용하는 기본 클래스를 구현했습니다.

나는 여기에 코드를 게시 : 당신 인서트를 받고있는 경우 말했다

How to save a child with assigned id in nhibernate 그때 나는이 같은 문제가 100 % 확실하지 않다.

관련 문제