一尘不染

休眠条件:左外连接,两个表均受限制

hibernate

我正在做左外部联接,但是我只能在第一个表上应用限制。ti是否也可以应用于第二个表?

这是我的代码:

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

这项工作(申请人拥有applicantName属性):

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

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

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

criteria.add(Restrictions.eq(“ products.productName”,“
product1”)//产品:属性的名称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


阅读 215

收藏
2020-06-20

共1个答案

一尘不染

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

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

请注意,您正在对该列进行限制而进行了左外部连接…实质上是使其成为内部连接。如果您还希望申请人没有产品,那么您也必须检查产品是否为空。

2020-06-20