hibernate - 为什么Grails可搜索插件在Hibernate AutoFlush上导致错误?

标签 hibernate grails flush autoflush searchable-plugin

在我要解决的Grails 1.2.5项目中,我们使用Grails Searchable plugin .5.5.1。

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

ERROR hibernate.AssertionFailure - an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session) org.hibernate.AssertionFailure: collection [domain-class] was not processed by flush()



但是,所涉及的域类已由hibernate映射和使用,而在可搜索插件的调用之外没有任何问题。

可搜索插件的用法如下:
  • 使用compass.openSession()创建指南针 session
  • 开始进行罗盘交易:compassSession.beginTransaction()
  • 然后在一个重要的未索引域类
  • 上调用compassSession.create(result.get(0))
  • 最后,调用compassTransaction.commit()提交事务。
  • 转到2并处理下一个域类

  • 在第3个和第4个Domain类之间,将触发自动刷新,并引发错误。

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

    以前有人遇到过此问题吗?

    我知道他们有一个 searchable-plugin的systemic issue with this back in pre .5 versions是否可能未完全解决这些问题?

    最佳答案

    This article帮助我理解了它。您必须在具有脏对象的 session 中进行一些Hibernate查询,并且在修改过程中它们会得到flush() -ed。

    有时,有可能在进行任何修改之前将所有只读查询移出事务,并在withTransaction{}中进行修改。

    关于hibernate - 为什么Grails可搜索插件在Hibernate AutoFlush上导致错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5353564/

    相关文章:

    java - Hibernate 一对多映射适用于列表而不是集合?

    java - 用于 Java 持久性的 JPA 或 Hibernate?

    java - 在这种情况下是否需要调用 flush() (JPA 接口(interface))?

    redis 在 flushall 命令上挂起

    java - 如何在 Hibernate 中设置 Sqlite 相对路径?

    grails - 无法在grails中调用方法本身

    spring - Grails 不使用 message.properties 来显示错误消息?

    tomcat - 当我通过 g :form, 提交大量参数时,params 对象中缺少一些参数

    python - 打印出 os.popen() 的输出而不在 python 中缓冲

    java - Hibernate 中带注释的标记系统