2009-05-03 3 views
5

Company 클래스와 CompanySettings 클래스 사이에 일대일 관계가 있습니다. 나는 새로운 회사 객체를 생성 할 때, (A CompanySettings 객체의 설정 속성에 대한 회사의 생성자에서 생성), 다음NHibernate, 일대일 매핑, 캐스케이드 삽입

SaveOrUpdate(session, companyObject) 

나는 CompanySettings에 회사에서 폭포에 INSERT를 기대합니다. 그러나 CompanySettings 개체에 SaveOrUpdate를 명시 적으로 호출하지 않으면이 문제가 발생하지 않습니다. 회사 설정 클래스

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"`> 
    <class name="AST.Domain.Company, AST.Domain" table="Companies"> 
    <id name="EntityID" column="CompanyId"> 
     <generator class="guid.comb" /> 
    </id> 
    <property name="CompanyName" /> 
    . . . 
    <one-to-one name="Settings" class="AST.Domain.CompanySettings, AST.Domain" 
       constrained="true" lazy="false" /> 
    </class> 
</hibernate-mapping> 

내 매핑 파일 :

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="AST.Domain.CompanySettings, AST.Domain" table="CompanySettings"> 
    <id name="EntityID" column="CompanyId"> 
     <generator class="foreign"> 
     <param name="property">Company</param> 
     </generator> 
    </id> 
    <property name="MaxUsers" /> 
    <one-to-one name="Company" class="AST.Domain.Company, AST.Domain" /> 
    </class> 
</hibernate-mapping> 

답변

5

당신이 당신의 one-to-one 매핑에 cascade="all"를 지정 해봤

매핑 파일은 다음과 같습니다?

2

회사 매핑에서 일대일의 캐스케이드 속성을 설정하십시오.

다른 메모 : CompanySettings를 별도의 엔터티 대신 Company의 '구성 요소'로 매핑한다고 생각해 봤습니까?

'CompanySettings'가 '값 개체'가 아니며 구성 요소로서 더 잘 매핑되어야합니까?

이렇게하면 CompanySettings 값을 'Company'와 동일한 테이블에 넣을 수 있지만 별도의 클래스로 처리됩니다.

일대일 매핑이므로 데이터 모델에도 더 좋은 옵션이라고 생각합니다.

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"`> 
    <class name="AST.Domain.Company, AST.Domain" table="Companies"> 
    <id name="EntityID" column="CompanyId"> 
     <generator class="guid.comb" /> 
    </id> 
    <property name="CompanyName" /> 
    . . . 
    <component name="Settings" class="AST.Domain.CompanySettings, AST.Domain"> 
     <property name="MaxUsers" /> 
    </component> 
    </class> 
</hibernate-mapping> 

당신은 참으로이 별도의 객체 (회사 & CompanySettings이되며, 회사는 'Companysettings'개체를해야하지만 설정이 저장됩니다 :

그런 다음, 당신의 매핑은 다음과 같이 보일 것입니다 회사 테이블).

또는 왜 CompanySettings를 별도의 테이블에 넣었는지에 대한 특별한 이유가 있습니까? 내 말은, 이것이 일대일 관계이므로 이것이 완전히 필요하지 않다는 것입니다 (그리고 심지어 나쁜 습관이라도 :)).

관련 문제