У меня есть следующее отображение:
<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 имеет значение null, если в таблице special_properties нет записи для конкретного клиента. (при использовании обычного сопоставления один к одному в specialProperty содержится прокси-объект, поэтому Я не могу проверить на null) Так что в коде я могу просто сделать customer.specialProperty == null, чтобы увидеть, есть ли у Customer SpecialProperty.
Я пытаюсь написать запрос, который будет возвращать всех клиентов, которые имеют ненулевое SpecialProperty, и другой запрос, который будет возвращать всех клиентов, которые имеют нулевое SpecialProperty.
Я могу получить клиентов, которые имеют ненулевой SpecialProperty, например:
from Customer customer inner join customer.specialProperty
Однако я не могу получить клиентов, у которых нет SpecialProperty (например, customer.specialProperty == null)
Я пробовал несколько вещей. В основном я хочу что-то вроде
from Customer customer where customer.specialProperty is null
но при этом создается sql, который проверяет, что customer.id имеет значение null по любой причине.
Предложения