HQL語句中的join fetch


from Paper as paper join fetch paper.authors as authors where authors.id='xxxx';

from Paper as paper join fetch paper.authors where paper.authors.id='xxxx';

這兩個語句有什么區別呢?通過最終生成的sql發現。

上面HQL生成最終sql(部分) from s_paper paper inner join s_paper_author author where author.paper_id=paper.id where author.id='xxx'

下面HQL生成最終sql(部分) from s_paper paper inner join s_paper_author author where author.paper_id=paper.id,s_paper_author author1 where author1.paper_id=paper.id and author1.id='xxx'

可以看出來,下面的多了一個關聯。那么問題來了,這兩個有什么區別呢?

通過測試發現,第一個sql最終查詢的結果,如果論文作者有多個,加上子表的查詢條件后,最終封裝到實體類里面的卻只有符合條件的一個子類(論文作者),但是少了一個關聯查詢,可以節省部分性能。

第二個sql最終查詢的結果,是無論有多少個作者,全部都封裝進來了。但是因為多關聯了一次表查詢,有部分性能損失。

綜上,可以根據具體的場景來選擇合適的關聯方式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM