2009-05-21 81 views
0

我有以下映射: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> 

使用這種映射,customer.specialProperty爲空時,有在special_properties表中的特定客戶沒有條目。(使用常規的一對一映射結果在持有代理對象的specialProperty中,所以我無法測試null)因此,在代碼中,我可以簡單地執行customer.specialProperty == null以查看Customer是否具有SpecialProperty。

我試圖編寫一個查詢,它將返回所有擁有非空SpecialProperty的客戶,以及另一個將返回所有擁有null SpecialProperty的客戶的查詢。

我能得到誰擁有非空SpecialProperty像這樣的客戶:

from Customer customer inner join customer.specialProperty 

但是,我不能讓沒有SpecialProperty(如customer.specialProperty == NULL)

誰的客戶

我試過幾件事。基本上我想要的是像

from Customer customer where customer.specialProperty is null 

但這生成SQL,對於customer.id測試無論出於何種原因被空。

對此提出建議?

回答

0

你在你的specialProperty定義中有column =「id」

+0

好吧,這就解釋了爲什麼它在生成的查詢中檢查customer.id。然而,該列=「id」是必要的,因爲SpecialProperty實際上是由該表的主鍵表示的。 (SpecialProperty的主鍵是對客戶PK的參考) – Boden 2009-05-22 03:26:16