NHibernate one-to-one 매핑을 어디에 두 번째로 테이블 데이터 null 이 될 수 있습니다

StackOverflow https://stackoverflow.com/questions/244812

  •  05-07-2019
  •  | 
  •  

문제

기존 데이터베이스 테이블 트랜잭션에서습니다.추가로 새로운 표라 TransactionSequence 는 각 거래 궁극적으로는 단 하나의 기록이다.우리가 사용하는 순서 테이블을 계산 트랜잭션이 주어진 계정이다.나에 매핑되어 있는 이로 하는 곳에 매핑 TransactionSequence 는 기본 키의 TransactionId.

제약 조건이 있다는 것 대신에서 트리거로 트랜잭션 테이블을 업데이트를 허용하지 않습의 취소 또는 게시된 트랜잭션이 있습니다.

그래서,시퀀스가 계산 트랜잭션은 저장,NHibernate 를 보내려고 하는 업데이트 트랜잭션에서 다음과 같'업데이트 트랜잭션을 설정 TransactionId=?는 TransactionId=?'.그러나 이것 때문에 실패입니다.어떻게 구성할 수 있습니 mapping 도록 NHibernate 하려고 시도하지 않을 것입 업데이트 트랜잭션 테이블을 때 새로운 TransactionSequence 테이블 삽입?

트랜잭션 매핑:

<class name="Transaction" table="Transaction" dynamic-update="true" select-before-update="true">
    <id name="Id" column="ID">
        <generator class="native" />
    </id>

    <property name="TransactionTypeId" access="field.camelcase-underscore" />
    <property name="TransactionStatusId" column="DebitDebitStatus" access="field.camelcase-underscore" />

    <one-to-one name="Sequence" class="TransactionSequence" fetch="join"
                 lazy="false" constrained="false">      
    </one-to-one>
</class>

시퀀스를 매핑:

<class name="TransactionSequence" table="TransactionSequence" dynamic-update="true">
    <id name="TransactionId" column="TransactionID" type="Int32">
        <generator class="foreign">
            <param name="property">Transaction</param>
        </generator>
    </id>

    <version name="Version" column="Version" unsaved-value="-1" access="field.camelcase-underscore" />

    <property name="SequenceNumber" not-null="true" />

    <one-to-one name="Transaction" 
                class="Transaction" 
                constrained="true" 
                foreign-key="fk_Transaction_Sequence" />

</class>

어떤 도움이 될 것입니다.

도움이 되었습니까?

해결책

중 하나를 매핑에서 nhibernate 하는 방식으로 작동하지 않는 당신이 생각하는 않습니다.그것도록 설계되었는 당신이 두 개의 클래스는 지속될 경우 해당 테이블에 동일한 기본 키가 있습니다.

그러나 당신이 작동하도록 만들 수 있습니다,그러나 그것은 예쁘지 않다.는 방법에 대해 알아보겠습니다 다음을 제공 몇 가지 대안:

에 트랜잭션 hbml:

<one-to-one name="Sequence" class="TransactionSequence" property-ref="Transaction"/>

시퀀스에서 html:

<many-to-one name="Transaction" class="Transaction" column="fk_Transaction_Sequence" />

당신이 무엇을 원하는지 확인하여 주십시오.참고 속성-ref.

다음 질문은 당신에 게시하고 요청하는 방법 당신은 게으른 로드 중 하나를 연결합니다.대답할 수 없습니다...잘할 수 있지만,그것은 아마이 작동하지 않습니다.문제는 당신이 당신의 외국에서 키 시퀀스에 테이블을 의미하는 nhibernate 을 치고 있는 데이터베이스를 보면 대상 존재합니다.다음할 수 있습와 함께 놀아보십시오 제약="true/false"를 참조할 수 있는 경우 그것을 설득하중에 로드할을 한다.

모두 모두,그 결과 총에서 당신의 시간 낭비입니다.

제안 중 하나:

  1. 두 개의 다 연결합니다.
  2. 는 대회로 컬렉션에 다른 끝입니다.

이 저장됩니다 당신의 많은 두통이다.

다른 팁

는 내 상황 <join table> 매핑했다.하는지 확인을 했는 속성에서 온 두 번째는 테이블이 null 을 허용 유형,또는 그것의 삽입에 저장하는 경우에도 아무것도 변경했다.이후 나는 필요하지 않았으로드 두 번째,테이블이 잘 작동합니다.나는 짝을 매핑을 작동하는지만,그것은 직관적이지 않는 것 같은 더 복잡한 보다 가입 테이블 옵션,그러나이 <join table> 에서만 사용할 수 있 NHibernate2.0 니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top