覆盖加入标准中的 'ON' 主列
Override join 'ON' primary column in Criteria
我正在使用 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
有没有一种方法可以在我希望拥有的联接的条件中明确提及?
NHibernate 总是基于外键进行连接。
我猜你已经通过 Application.AddressId
外键配置了 Application
和 Address
实体之间的关系。
这就是为什么你有 app.AdressId = add.Id
加入。
如果我是对的,你不能在其他 属性 上进行连接。
您可以使用子查询找到较慢的解决方法或手动编写 sql 查询。
查看其他答案:
我正在使用 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
有没有一种方法可以在我希望拥有的联接的条件中明确提及?
NHibernate 总是基于外键进行连接。
我猜你已经通过 Application.AddressId
外键配置了 Application
和 Address
实体之间的关系。
这就是为什么你有 app.AdressId = add.Id
加入。
如果我是对的,你不能在其他 属性 上进行连接。 您可以使用子查询找到较慢的解决方法或手动编写 sql 查询。
查看其他答案: