2017-09-06 125 views
1

我正在使用Criteria,我想明確告訴hibernate加入特定列而不是主鍵和外鍵列。我的代碼是在標準中覆蓋連接「ON」主列

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 

有沒有一種方法可以在我想要的連接標準中明確提及?

回答

2

NHibernate總是基於外鍵進行連接。 我想你已經通過Application.AddressId外鍵配置ApplicationAddress實體之間的關係。 這就是爲什麼你有app.AdressId = add.Id加入。

如果我是正確的,你不能做一些其他財產的加入。 您可以使用子查詢找到較慢的解決方法或手動編寫SQL查詢。

見其他答案:

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