2009-05-21 11 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です。(通常の1対1マッピングを使用すると、プロキシオブジェクトを保持するspecialPropertyが生成されるため、nullをテストできません)コード内で、Customer.specialProperty == nullを実行してCustomerにSpecialPropertyがあるかどうかを確認できます。

null以外のSpecialPropertyを持つすべてのCustomerと、null SpecialPropertyを持つすべてのCustomersを返す別のクエリを返すクエリを作成しようとしています。私はそうのような非ヌルSpecialPropertyているお客様取得することができます

from Customer customer inner join customer.specialProperty 

しかし、私はSpecialProperty(例えばcustomer.specialProperty == null)を持っていない顧客を取得することはできませんが

私はいくつかのことを試しました。基本的に私が欲しいのは

from Customer customer where customer.specialProperty is null 

のようなものであるが、これは何らかの理由でヌルであることcustomer.idをテストするSQLを生成します。

提案?

答えて

0

specialPropertyの定義にcolumn = "id"があります

+0

これは、生成されたクエリでcustomer.idがチェックされている理由を説明しています。ただし、SpecialPropertyは実際に表の主キーで表されるため、そのcolumn = "id"は必要です。 (SpecialPropertyの主キーは顧客のPKへの参照です) – Boden

+0

の代わりに、顧客IDを参照するための別のプロパティが必要です –

関連する問題