我需要根据运行时设置的参数在我的映射类上设置一个布尔值。
在普通的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。
答案 0 :(得分:1)
在映射中使用<formula>
。
我假设您有一个对象到资源表的映射,让它称之为Resource,并且member_key和resource_key被映射到Resource中的ResourceKey和MemberKey属性。
<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>