簡體   English   中英

在循環中運行nativeQuery不會返回正確的數據

[英]Running a nativeQuery in a loop doesn't return correct data

我試圖在循環中運行本機查詢,查詢顯示正確的SQL語法,但輸出始終相同。

    for (int i=0; i<translations.size(); i++) {
        Query query = entityManager.createNativeQuery("Select * from " + translations.get(i).getName(), MyModel.class);
        rows = (List<MyModel>)query.getResultList();
        // rest of the function...
    }

現在在控制台中我可以看到Hibernate語句如:

Hibernate: Select * from translation1
Hibernate: Select * from translation2
Hibernate: Select * from translation3

但變量“rows”總是包含第一個select語句的結果,即translation1表的行。

任何想法為什么在控制台中它顯示它也從其他表中選擇但實際上它總是從translation1表獲取數據?

如果所有表都具有相同的id組,則它是預期的行為。

Hibernate會話高速緩存保證在會話中只有一個特定類型的實體的實例具有特定的id。 由於即使在本機查詢的情況下,實體也是通過會話緩存解析的,因此您將獲得相同的實例。

所以,你有幾個選擇:

  • 重新考慮你的數據庫謝瑪
  • 手動從查詢結果構造對象
  • 通過調用clear()detach()強制清除會話緩存

你確定rows變量實際上不包含返回結果的最后一行嗎? 如何初始化行以及如何處理循環內的變量? 如果要從所有查詢中獲取所有結果,則必須將每個查詢(在循環內)添加到在循環開始之前聲明的列表/集變量。

或者您可以使用一些正確的SQL並執行:

SELECT * FROM Table1 [JOIN/UNION] Table2 etc...

暫無
暫無

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

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