NHibernate one-to-one 매핑을 어디에 두 번째로 테이블 데이터 null 이 될 수 있습니다
-
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"를 참조할 수 있는 경우 그것을 설득하중에 로드할을 한다.
모두 모두,그 결과 총에서 당신의 시간 낭비입니다.
제안 중 하나:
- 두 개의 다 연결합니다.
- 는 대회로 컬렉션에 다른 끝입니다.
이 저장됩니다 당신의 많은 두통이다.
다른 팁
는 내 상황 <join table>
매핑했다.하는지 확인을 했는 속성에서 온 두 번째는 테이블이 null 을 허용 유형,또는 그것의 삽입에 저장하는 경우에도 아무것도 변경했다.이후 나는 필요하지 않았으로드 두 번째,테이블이 잘 작동합니다.나는 짝을 매핑을 작동하는지만,그것은 직관적이지 않는 것 같은 더 복잡한 보다 가입 테이블 옵션,그러나이 <join table>
에서만 사용할 수 있 NHibernate2.0 니다.