我正在使用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
我是否可以在我希望的联接标准中明确提及?
答案 0 :(得分:2)
NHibernate总是基于外键加入。
我猜你已经通过Application
外键配置了Address
和Application.AddressId
个实体之间的关系。
这就是你加入app.AdressId = add.Id
的原因。
如果我是对的,你不能在其他财产上加入。 您可以使用子查询找到较慢的解决方法,也可以手动编写SQL查询。
见其他答案: