2

在我尝试排除故障的Grails 1.2.5 项目中,我们使用 Grails Searchable 插件.5.5.1。

问题在于,每当我们尝试索引大型集合域类时,Grails 都会不断抛出:

ERROR hibernate.AssertionFailure - 发生断言失败(这可能表明 Hibernate 中存在错误,但更可能是由于会话使用不安全) org.hibernate.AssertionFailure:集合 [domain-class] 未由 flush() 处理

但是涉及的域类已经被hibernate映射和使用,除了对可搜索插件的调用之外没有问题。

可搜索插件的使用如下:

  1. 创建一个指南针会话compass.openSession()
  2. 开始罗盘交易:compassSession.beginTransaction()
  3. 然后compassSession.create(result.get(0))在一个重要的未索引域类上调用
  4. finallycompassTransaction.commit()被调用来提交事务。
  5. 转到 2 并处理下一个域类

在第 3 和第 4 个域类之间,触发了引发错误的自动刷新。

谁能给我有关如何解决此问题的任何提示?

有没有人遇到过这个问题?

我知道他们在可搜索插件的 0.5 之前版本中对此存在系统性问题。 这些问题可能没有完全解决吗?

4

1 回答 1

2

这篇文章帮助我理解了它。您必须在具有脏对象的会话中进行一些 Hibernate 查询,并且它们flush()在修改过程中被编辑。

有时可以在任何修改发生之前将所有只读查询移到事务之外,并在withTransaction{}.

于 2011-03-21T14:10:01.633 回答