Join 覆盖联接';在';标准中的主列
我使用的是条件,我想明确地告诉hibernate在特定列上连接,而不是主键列和外键列。我的代码是Join 覆盖联接';在';标准中的主列,join,nhibernate,criteria,createcriteria,Join,Nhibernate,Criteria,Createcriteria,我使用的是条件,我想明确地告诉hibernate在特定列上连接,而不是主键列和外键列。我的代码是 CreateCriteria<Application>("Application") .CreateCriteria("Application.Address", "Address", JoinType.FullJoin) 我希望查询结果如下所示 Select * from Application app Full Join Address add ON app.PersonId =
CreateCriteria<Application>("Application")
.CreateCriteria("Application.Address", "Address", JoinType.FullJoin)
我希望查询结果如下所示
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"))
是否有一种方法可以在我希望的联接的标准中明确提及 NHibernate总是基于外键进行连接。 我猜您已经通过
Application.AddressId
外键配置了Application
和Address
实体之间的关系。
这就是为什么在join中有app.AdressId=add.Id
如果我是对的,你不能在其他属性上进行连接。
您可以通过子查询找到较慢的解决方法,或者手动编写sql查询
见其他答案:
CreateCriteria<Application>("Application")
.CreateCriteria("Application.Address", "Address", JoinType.FullJoin, Restrictions.eqProperty("Application.Person.Id", "Address.Person.Id"))
Select * from Application app Full Join Address add ON app.PersonId = add.PersonId and app.AdressId = add.Id