2009-05-08 4 views
3

대리점과 판매자 사이에 프록시를 사용하여 게으른 관계가 있어야하는 일대일 관계가 있습니다. 외래 키가 정의 된 측면 (판매자, 참조 딜러),이 잘 작동합니다. 그러나 다른 쪽에서는 효과가 없습니다. 판매자는 항상 열심히로드됩니다. "Some explanations on lazy loading"에 설명 된대로 constrained="true"으로 설정했지만 도움이되지 않았습니다. 이 두 클래스는 하나 개의 테이블에있는 문제프록시를 사용하지 않는 게으른 일대일

<class name="Role" table="PER_PERSROLE" abstract="true"> 
    <id column="OID" type="long"> 
     <generator class="native" /> 
    </id> 
    <discriminator column="SUBTYPE" type="string" /> 
</class> 

<subclass name="Dealer" extends="Role" discriminator-value="DEAL"> 
    <property name="gpNr" column="GP_NR" type="string" /> 
    <one-to-one name="seller" property-ref="dealer" lazy="proxy" constrained="true" 
     outer-join="false" /> 
</subclass> 

<subclass name="Seller" extends="Role" discriminator-value="SELL"> 
    <many-to-one name="dealer" column="SELLER_DEALEROID" lazy="proxy" 
     outer-join="false" /> 
</subclass> 

인가 :

사용 된 매핑되는 다음? 엄격하게 말하면 관계는 데이터베이스에 제약이 없지만 (이 모델을 사용할 수는 없음) 도메인 모델은 항상 두 엔티티를 모두 필요로하므로 애플리케이션이이를 보장합니다.

+0

당신은 정말 Hibernate의 1-1 매핑을 사용하지 않으 : http://www.sworddance.com/blog/2006/10/03/hibernate-nastiness-using-the-one-to-one-mapping/ – Pat

답변

0

session.get (id)을로드 중입니까? HQL 쿼리를 사용하여 인스턴스로드를 시도 했습니까? 그러면 쿼리에서 열망하거나 게으른로드와 어떤 관계를 지정할 수 있습니다.

HTH는

+0

안녕하세요 톰,로드(), get() 및 HQL 쿼리. 나는 명시 적으로 Hibernate에게 HQL 쿼리를 사용하는 게으른로드를 알리는 방법을 알지 못한다 - 나는 게으른 관계 라 할지라도 관계를 열심히로드하기 위해 'join fetch ...'를 알고있다. – rudolfson

1

난 당신이에 링크 된 페이지는 constrained="true"을 설정하는 것이 좋습니다 이유는 확실하지 오전하지만, 가장 잘 설명한다고 생각합니다. 데이타베이스 레벨에서 생각하면, Hibernate는 주어진 프로퍼티 (딜러의 판매자)가 데이터베이스에 도달하지 않고 null인지 아닌지를 알 수 없다. (어떤 행이 반환되는지 확인하기 위해 SELECT ... WHERE OID=:sellerOrDealerId을 수행해야한다.) 그리고 데이터베이스에 도달하는 동안 나머지 행을 가져올 수도 있습니다. 협회 (판매자의 딜러)의 다른 쪽에서 이미 행을 가져 왔으므로 (따라서 SELLER_DEALEROID 열) 이러한 문제는 없습니다. 내가 한 번이 비슷한 발생했고, (ERR, 비 - 널 (NULL)) 협회가 아닌 선택하여 그것을 해결할 수 있었다

+0

그러나 연결을 선택적/비 nullable로 만들려면 constrained를 true로 설정해야합니다. 적어도 그것이 설명을 이해하는 방법입니다. 아니면 어떻게이 일을 성취하셨습니까? – rudolfson

관련 문제