我在一个交易
中有以下说明(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 :(得分:0)
对标准API的调用涉及刷新,而HQL语句的执行则不涉及。可能你的FlushMode设置为AUTO,据我所知,它允许Hibernate做它认为最好的事情。如果要在任何查询之前使用数据库监听会话,请将FlushMode设置为ALWAYS。