2012-12-10 18 views
1

我有一個交易休眠:HQL不加載數據,但標準不

(0)Transaction begins 
(1)Insert A into myTable 
(2)Load all data from myTable using HQL  #-> A is not loaded 
(3)Load all data from myTable using Criteria #-> A is loaded 
(4)Transaction ends 

下面的說明但是,如果我換(2)(3),這兩種情況都很好,A被加載。

什麼會導致此問題?


詳情: 以下是代碼我有什麼

@Transcational 
myFunction(){ 
    //I have A inserted into myTable and the rest... 

    SQLQuery crit = (SQLQuery) getSession().createSQLQuery("select * from myTable "); 
    ArrayList<PatternHeader> ls = (ArrayList<PatternHeader>)crit.list(); //There is no trace of A 

    Criteria cr = getSession().createCriteria(MyTable.class); 
    ArrayList<PatternHeader> crls = (ArrayList<PatternHeader>)cr.list(); // A is loaded as well 
} 
+0

其實你正在做一個SQL查詢而不是HQL查詢。 – Atropo

+0

是的,我知道。事實上,查詢有點不同,但爲簡單起見,我將其更改爲此。 –

回答

0

的標準API調用涉及平齊,而HQL語句的執行不會。可能你的FlushMode被設置爲AUTO,就我所知,它允許Hibernate做它認爲最好的事情。如果您想在任何查詢之前刪除與數據庫的會話,請將FlushMode設置爲ALWAYS。

+0

不幸的是,我無法檢查您的解決方案。只要我測試你的答案,我就會通知你。順便說一句,'FlushMode.Always'怎麼樣?這是不是你打算做的? –

+0

哦。當然!我的錯。永遠是你的朋友。查看我的答案的編輯。 – sorencito

+0

剛剛測試過您的建議解決方案。原來你是對的。請編輯你的答案,並刪除'我想'的部分,因爲它確切的點,你的答案被接受。謝謝。 –