私は次のマッピングがあります。関連するエンティティプロパティが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を生成します。
提案?
これは、生成されたクエリでcustomer.idがチェックされている理由を説明しています。ただし、SpecialPropertyは実際に表の主キーで表されるため、そのcolumn = "id"は必要です。 (SpecialPropertyの主キーは顧客のPKへの参照です) – Boden
の代わりに、顧客IDを参照するための別のプロパティが必要です –