我正在使用标准,我想明确告诉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
有什么方法可以在我希望拥有的连接方面明确提及?
nhibernate总是会加入外键。我想您已经通过Application.AddressId
外键配置了Application
和Address
实体之间的关系。这就是为什么您在加入中拥有app.AdressId = add.Id
的原因。
如果我是对的,则无法在其他属性上加入。您可以通过子查询找到较慢的解决方法或手动编写SQL查询。
请参阅其他答案:
- https://stackoverflow.com/a/28689750/5126411
- https://stackoverflow.com/a/44924773/5126411