簡體   English   中英

Join Fetch在Hibernate查詢語言中不起作用

[英]join fetch not working in Hibernate Query Language

我想檢索一個數據庫命中中的所有記錄,為此,我正在使用join fetch語句,這是我的查詢

String q = "SELECT oneChat from " + Chat.class.getName() + " oneChat "
                + " join fetch oneChat.user1 " 
                + " join fetch oneChat.user2 "
                + " join fetch oneChat.user3 "
                + " join fetch oneChat.groupData "
                + "where oneChat.dmlStatus != :dmlStatusValue"
                + " AND group_id = :groupIdValue" + " AND reference_id = 0"
                + " AND root_chat_id = oneChat.chatId";

我的表中總共有4個外鍵/聯接,所以我添加了聯接提取語句,但是它不起作用,即如果刪除聯接提取語句,我什么也不返回任何結果。 默認情況下,我對表聯接的訪存是Eager(未將其更改為Lazy)。

日志文件中也沒有sql語法錯誤。 我有什么想念的嗎?

更新:這是因為第二個連接,即user2返回null,所以我沒有得到任何數據。 現在,如果有人可以告訴我如何應對這個問題,那么查詢應該是獨立的,它不應該依賴數據。

如果無論數據是否存在於依賴項上,都希望返回結果,則應使用左聯接而不是內部聯接(聯接獲取等於內部聯接獲取):

"SELECT oneChat from " + Chat.class.getName() + " oneChat "
                + " left join fetch oneChat.user1 " 
                + " left join fetch oneChat.user2 "
                + " left join fetch oneChat.user3 "
                + " left join fetch oneChat.groupData "
                + "where oneChat.dmlStatus != :dmlStatusValue"
                + " AND group_id = :groupIdValue" + " AND reference_id = 0"
                + " AND root_chat_id = oneChat.chatId";

現在,當OneChat對數據庫沒有任何user2依賴關系時,無論如何查詢都將返回結果。

只是在一邊..如果使用前綴,則為清楚起見,請嘗試在where子句的group_idroot_chat_id字段中添加前綴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM