JPA QL 中使用外串連遇到的問題和解決方式

來源:互聯網
上載者:User

  這次遇到了一個問題,涉及到了四個實體,進行匹配模糊查詢。  其中facility實體引用address實體,address實體引用country實體和state實體,facility實體是主實體(其對應的表是主表)。   事情的起因是,當對facility實體及其他關聯實體進行聯合模糊查詢時,有的資料沒有被檢索出來。還有,查詢語句是寫成了JPA QL的形式“select o from Facility o    where o.objAccount.acntId = 1  and o.facStatus = 1  and (lower(o.strFacilityName) like 'cer%' or lower(o.addressesList.addAddress1) like 'cer%' or lower(o.addressesList.addCity) like 'cer%' or lower(o.addressesList.states.stateName) like 'cer%' or lower(o.addressesList.countries.countryName) like 'cer%') order by o.strFacilityName asc”.   當時,想到了,可能是,因為表與表之間的串連是內串連,所以應該使用外串連,但是,只用原始sql寫過外串連語句,這個jpa sql中怎麼寫外串連還真是不知道。於是開始了嘗試,寫了很多種都沒有通過運行解析。   今天,忽然想到了逐步實現,即先嘗試讓facility實體和address實體的關聯,“select o from Facility o  left join o.addressesList  p where o.objAccount.acntId = 1  and o.facStatus = 1  and (lower(o.strFacilityName) like 'cer%' or lower(p.addAddress1) like 'cer%' or lower(p.addCity) like 'cer%' ) order by o.strFacilityName asc”. 結果,成功了,基本上可以肯定了,jpa sql對外串連的解析方式是通過對於別名的嵌套關係了產生最終的sql語句的。所以,最終的sql語句是“select o from Facility o left join o.addressesList p left join p.countries c left join p.states s   where o.objAccount.acntId = 1  and o.facStatus = 1  and (lower(o.strFacilityName) like 'cer%' or lower(p.addAddress1) like 'cer%' or lower(p.addCity) like 'cer%' or lower(s.stateName) like 'cer%' or lower(c.countryName) like 'cer%') order by o.strFacilityName asc”   現在還有一些疑問,有的資料上說,ejb3預設表與表之間的關聯是左外串連。那就奇怪了,我之前寫的jpa sql為什麼沒有檢索出相應的資料呢,難道是我寫的條件把外串連變成了內串連?我寫jpa sql的過程中,注意到一個問題,一旦前面指定了各個別名,後面的條件必須用別名來引用欄位,否則,還是被當內串連來看待。看來為where條件中的寫法“o.addressesList.states.stateName” 和 “o.addressesList.countries.countryName” 很可能是重建立立了各個表之間的內串連關係。當然這個我還需進一步的確認。

  以上,是我,經過一些冥思苦想最終解決問題之後的總結。中間經過很多曲折,上網不論baidu還是google都沒有類似的例子,這次一定要記好。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.