2009-05-21 2 views
0

У меня есть следующее отображение:Запрос на спящий режим для объекта на основе того, имеет ли связанное свойство объекта null?

<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, чтобы узнать, имеет ли клиент специальный объект.

Я пытаюсь написать запрос, который вернет всех Клиентов, у которых есть ненулевой 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 быть нулевой по какой-либо причине.

Предложения?

ответ

0

У вас есть столбец = "id" в вашем определении специального свойства

+0

Хорошо, это объясняет, почему он проверяет client.id в сгенерированном запросе. Однако этот столбец = «id» необходим, поскольку SpecialProperty фактически представлен первичным ключом для таблицы. (первичный ключ для SpecialProperty - это ссылка на PK клиента) – Boden

+0

, за исключением того, что вместо этого вы должны иметь другое свойство для ссылки на идентификатор клиента –