我有两个与一对一映射关联的类:
<class name="Employee" table="Employees">
...
<one-to-one name="Address" class="AddressInfo">
...
</class>
我想使用条件表达式来仅获取关联的Address类不为null的Employees,就像这样(我知道这不起作用):
IList employeesWithAddresses = sess.CreateCriteria(typeof(Employee))
.Add( Expression.IsNotNull("Address") )
.List();
我想这可能是一个非常困难的问题,或者几乎没有人试图这样做?
答案 0 :(得分:5)
您是否尝试为Address属性创建别名并检查Address的ID /主键是否为空?
类似的东西:
IList employeesWithAddresses = sess.CreateCriteria(typeof(Employee))
.CreateCriteria("Address", "address").Add( Expression.IsNotNull("Id") )
.List();
答案 1 :(得分:0)
要隐式触发Alias / Join一对一,你不应该使用点符号吗?然后检查地址类中的任何字段:
IList employeesWithAddresses = sess.CreateCriteria(typeof(Employee))
.Add( Expression.IsNotNull("Address.Id") )
.List();
这可能与Kareena的方法相同,但我相信这等于.CreateAlias()。使用CreateAlias,您可以指定FetchMode(使用的连接类型),但由于您需要具有相应地址的行,因此不应该是nessecary(因为INNER是默认值)。也不应该检查它是否为空。
IList employeesWithAddresses = sess.CreateCriteria(typeof(Employee))
.CreateAlias("Address")
.List();