Hibernate Criteria:Left Outer Join对两个表都有限制

时间:2010-02-05 15:19:50

标签: hibernate join criteria hibernate-criteria

我正在进行LEFT OUTER JOIN,但我只能在第一个表上应用Restrictions。有没有办法在第二张桌子上申请?

这是我的代码:

Criteria criteria = this.crudService
        .initializeCriteria(Applicant.class).setFetchMode("products",
              FetchMode.JOIN);.

这是有效的(申请人有申请人姓名):

criteria.add(Restrictions.eq("applicantName", "Markos")

这些都不起作用(产品具有productName属性)

criteria.add(Restrictions.eq("productName", "product1")

criteria.add(Restrictions.eq(“products.productName”,“product1”)// products:属性的名称 criteria.add(Restrictions.eq(“Product.productName”,“product1”)//产品:数据库表的名称

这是我收到的例外(如果我理解正确的话)申请人中不存在productName属性:

EJB Exception: ; nested exception is: org.hibernate.QueryException: could not resolve property: products.inventedName of: org.myCompany.applicant.entity.Applicant; nested exception is: org.hibernate.QueryException: could not resolve property: products.inventedName of: org.myCompany.applicant.entity.Applicant

我尝试使用别名,但这会产生一个INNER JOIN,而不是我想要的LEFT OUTER JOIN。

如何对两个表格施加限制?

更新

问题可能与此相同: https://forum.hibernate.org/viewtopic.php?p=2393694

3 个答案:

答案 0 :(得分:18)

您可以在createalias中指定左外连接...

.CreateAlias("products", "p", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
.Add(Restrictions.Eq("p.inventedName", inventedName));

请注意,您正在执行左外连接,并对该列进行限制...基本上使其成为内连接。如果您还希望申请人没有产品,那么您也必须检查空产品。

答案 1 :(得分:0)

更新:

.CreateAlias("products", "p", JoinType.LEFT_OUTER_JOIN)
.Add(Restrictions.Eq("p.inventedName", inventedName));

答案 2 :(得分:0)

我解决了这个问题,创建了一个新标准,我可以在两种情况下都使用LEFT_OUTER_JOIN。