【问题标题】:Hibernate: HQL does not load the data, but criteria doesHibernate:HQL 不加载数据,但条件加载
【发布时间】:2012-11-27 19:02:34
【问题描述】:

我在一个交易

中有以下说明
(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
}

【问题讨论】:

  • 实际上你是在做一个 SQL 查询而不是一个 HQL 查询。
  • 是的,我知道。事实上,查询有点不同,但为了简单起见,我将其更改为这个。

标签: hibernate hql criteria hibernate-criteria


【解决方案1】:

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

【讨论】:

  • 很遗憾,我无法检查您的解决方案。我会在测试您的答案后立即通知您。顺便说一句,FlushMode.Always 怎么样?这不是你打算做的吗?
  • 哦。当然!我的错。永远是你的朋友。请参阅我的答案的编辑。
  • 刚刚测试了您提出的解决方案。事实证明你是对的。请编辑您的答案并删除 I suppose 部分,因为这正是重点,并且您的答案被接受。谢谢。
  • 刚刚调整了答案:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 2019-10-05
相关资源
最近更新 更多