覆盖Criteria中的join'ON'主列

问题描述 投票:1回答:1

我正在使用Criteria,我想明确告诉hibernate加入特定列而不是主键和外键列。我的代码是

CreateCriteria<Application>("Application")
.CreateCriteria("Application.Address", "Address", JoinType.FullJoin)

为此运行的查询是

Select * from Application app Full Join Address add ON app.AdressId = add.Id

我希望查询为

Select * from Application app Full Join Address add ON app.PersonId = add.PersonId

我改变了我的标准

CreateCriteria<Application>("Application")
.CreateCriteria("Application.Address", "Address", JoinType.FullJoin, Restrictions.eqProperty("Application.Person.Id", "Address.Person.Id"))

运行的sql查询是

Select * from Application app Full Join Address add ON app.PersonId = add.PersonId and app.AdressId = add.Id

有没有一种方法可以在我希望的连接标准中明确提及?

join nhibernate criteria createcriteria
1个回答
2
投票

NHibernate总是基于外键加入。我想你已经通过Application外键配置了AddressApplication.AddressId实体之间的关系。这就是你加入app.AdressId = add.Id的原因。

如果我是对的,你不能在其他一些财产上加入。您可以使用子查询找到较慢的解决方法或手动编写SQL查询。

看其他答案:

  1. https://stackoverflow.com/a/28689750/5126411
  2. https://stackoverflow.com/a/44924773/5126411
© www.soinside.com 2019 - 2024. All rights reserved.