2017-09-06 40 views
1

我正在使用Criteria,我想明确告诉hibernate加入特定列而不是主键和外键列。我的代码是在标准中覆盖连接“ON”主列

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 

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

回答

2

NHibernate总是基于外键进行连接。 我想你已经通过Application.AddressId外键配置ApplicationAddress实体之间的关系。 这就是为什么你有app.AdressId = add.Id加入。

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

见其他答案:

  1. https://stackoverflow.com/a/28689750/5126411
  2. https://stackoverflow.com/a/44924773/5126411