1

我在一笔交易中有以下说明

(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)and (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
}
4

1 回答 1

0

对条件 API 的调用涉及刷新,而 HQL 语句的执行则不涉及。可能您的 FlushMode 设置为 AUTO,据我所知,这允许 Hibernate 做它认为最好的事情。如果您想在任何查询之前与数据库同步会话,请将 FlushMode 设置为 ALWAYS。

于 2012-12-10T11:31:37.363 回答