2009-05-21 3 views
0

나는 다음과 같은 매핑이 있습니다관련 엔티티 프로퍼티가 null인지 여부에 따라 엔티티에 대한 Hibernate 쿼리?

<class name="Customer"> 
    <!-- actually one-to-one for all intents and purposes--> 
    <many-to-one name="specialProperty" class="SpecialProperty" cascade="all" not-found="ignore" insert="false" update="false" column="id" unique="true"/> 
</class 

<class name="SpecialProperty" lazy="false"> 
     <id name="id" column="customer_id"> 
      <generator class="foreign"> 
       <param name="property">customer</param> 
      </generator> 
     <one-to-one name="customer" class="Customer" constrained="true"></one-to-one> 
</class> 

이 매핑을 사용하여을의 special_properties 테이블에서 특정 고객에 대한 항목이없는 경우 customer.specialProperty가 null입니다. (정규 일대일 매핑을 사용하면 프록시 객체를 보유하는 specialProperty가되므로 null을 테스트 할 수 없습니다.) 그래서 코드에서 customer.specialProperty == null을 사용하여 Customer가 SpecialProperty를 가지고 있는지 확인할 수 있습니다.

null이 아닌 SpecialProperty가있는 모든 고객과 null SpecialProperty를 가진 모든 고객을 반환하는 다른 쿼리를 반환하는 쿼리를 작성하려고합니다.

내가 얻을 수있는 널이 아닌 SpecialProperty과 같이 한 고객 : 그러나

from Customer customer inner join customer.specialProperty 

, 내가 얻을 수없는 SpecialProperty (예 customer.specialProperty == NULL)

이없는 고객

몇 가지 시도해 봤습니다. 기본적으로 내가 원하는

from Customer customer where customer.specialProperty is null 

같은 것입니다 그러나 이것은 어떤 이유는 null customer.id를 테스트 SQL을 생성합니다.

제안 사항?

답변

0

specialproperty 정의에 column = "id"가 있습니다.

+0

그러면 생성 된 쿼리에서 customer.id를 확인하는 이유가 설명되어 있습니다. 그러나 SpecialProperty는 실제로 테이블의 기본 키로 표시되기 때문에 해당 column = "id"가 필요합니다. (SpecialProperty에 대한 기본 키는 고객의 PK에 대한 참조입니다) – Boden

+0

을 제외하고는 대신 고객 ID를 참조 할 수있는 다른 속성이 있어야합니다 –

관련 문제