nHibernate соединение на основе свойства, установленного во время запроса - PullRequest
0 голосов
/ 09 февраля 2012

Мне нужно установить логическое значение для моего сопоставленного класса на основе набора параметров во время выполнения.

В обычном SQL я бы достиг этого, как показано ниже:

select * from resource r,
case when k.resource_key is null then 0 else 1 end as owned,
left outer join resource k
     on k.resource_key = r.resource_key and k.member_key = 719469993
where r.member_key = 167367873

То, чего я пытаюсь достичь, - это объединить таблицу ресурсов с самой собой, чтобы выяснить, владеют ли 2 заданных пользователя одним и тем же ресурсом.

В этом случае мы используем ICriteria.

1 Ответ

1 голос
/ 09 февраля 2012

Используйте <formula> в вашем отображении.Я предполагаю, что у вас есть сопоставление объекта с таблицей ресурсов, давайте назовем его Resource, а member_key и resource_key будут отображаться с уважением в свойствах ResourceKey и MemberKey в Resource.

    <class name="Resource" table="resource" >
       <property name="MemberKey">
          <column name="member_key "/>
       </property>
       <property name="ResourceKey ">
          <column name="resource_key "/>
       </property>
       <property name="Owned">
          <formula>(select case when exists(select * from resource R where R.resource_key = ResourceKey and R.member_key = MemberKey) then 0 else 1 end)</formula>
       </property>
     </class>
...