我有以下映射:
<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 为空。 (使用常规的一对一映射会导致 specialProperty 持有代理对象,因此我无法测试 null)因此在代码中我可以简单地执行 customer.specialProperty == null 来查看客户是否具有 SpecialProperty。
我正在尝试编写一个查询,该查询将返回所有具有非空 SpecialProperty 的客户,另一个查询将返回所有具有空 SpecialProperty 的客户。
我可以获得具有非空 SpecialProperty 的客户,如下所示:
from Customer customer inner join customer.specialProperty
但是,我无法获得没有 SpecialProperty 的客户(例如 customer.specialProperty == null)
我已经尝试了几件事。基本上我想要的是
from Customer customer where customer.specialProperty is null
但这会生成用于测试 customer.id 是否为空的 sql,无论出于何种原因。
建议?