繁体   English   中英

在条件中覆盖联接“ 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外键配置了ApplicationAddress实体之间的关系。 这就是为什么在app.AdressId = add.Id中有app.AdressId = add.Id的原因。

如果我是对的,那么您不能在其他属性上进行联接。 您可以使用子查询找到较慢的解决方法,也可以手动编写SQL查询。

查看其他答案:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM