Java org.hibernate.hibernateeexception:在hibernate搜索中编制索引时出错(在事务完成之前)

Java org.hibernate.hibernateeexception:在hibernate搜索中编制索引时出错(在事务完成之前),java,hibernate,hibernate-search,Java,Hibernate,Hibernate Search,在hibernate的批处理事务中使用session.clear()时,我收到以下错误 org.hibernate.HibernateException: Error while indexing in Hibernate Search (before transaction completion) 我正在使用以下代码 try { for (TimeSheetEntity timeSheet : timeSheets) { timeSheet.s

在hibernate的批处理事务中使用session.clear()时,我收到以下错误

org.hibernate.HibernateException: Error while indexing in Hibernate Search (before transaction completion)
我正在使用以下代码

    try {
        for (TimeSheetEntity timeSheet : timeSheets) {
            timeSheet.setActive(false);
            try {
                session.update(timeSheet);

                count++;

                if (count % 250 == 0 || totalCount == count) {
                    System.out.println(count);

                    session.flush();
                    session.clear();
                }
            } catch (HibernateException ex) {
                logger.error(ArchiveImpl.class.getName(), ExceptionUtils.getStackTrace(ex) + "[" + timeSheet.getId() + "] ");
            } catch (Exception ex) {
                logger.error(ArchiveImpl.class.getName(), ExceptionUtils.getStackTrace(ex) + "[" + timeSheet.getId() + "] ");
            }
        }

        sessionManager.commit();
    } catch (HibernateException ex) {
        System.out.println(ex);
        logger.error(ArchiveImpl.class.getName(), ExceptionUtils.getStackTrace(ex));
        sessionManager.abort();
    } finally {
    }

现在,如果我删除session.clear();一切按预期进行。你知道为什么我不能在hibernate搜索的批处理事务中使用clear吗?

好的,你可以调用
session.clear()在for循环中。如果要关闭会话,请在循环结束后执行此操作。

好的,您可以调用
session.clear()在for循环中。如果要关闭会话,请在循环结束后执行此操作。

好的,您可以调用
session.clear()在for循环中。如果要关闭会话,请在循环结束后执行此操作。

好的,您可以调用
session.clear()在for循环中。如果要关闭会话,请在循环结束后执行此操作。

方法
session\flush()
刷新对数据库的更改。 通过使用
FullTextSession\flushToIndexes()
刷新对Hibernate Search管理的索引的更改

如果需要清除()会话,则应同时刷新这两个会话,否则某些实体仍将排队进行索引,但不再进行管理,这是一个问题

当您刷新数据库时,Hibernate Search不会自动刷新索引,因为如果您中止事务,则不会撤消对索引的刷新,因此最好明确决定要进行哪一次(或两次)刷新。

方法
会话#flush()
刷新对数据库的更改。 通过使用
FullTextSession\flushToIndexes()
刷新对Hibernate Search管理的索引的更改

如果需要清除()会话,则应同时刷新这两个会话,否则某些实体仍将排队进行索引,但不再进行管理,这是一个问题

当您刷新数据库时,Hibernate Search不会自动刷新索引,因为如果您中止事务,则不会撤消对索引的刷新,因此最好明确决定要进行哪一次(或两次)刷新。

方法
会话#flush()
刷新对数据库的更改。 通过使用
FullTextSession\flushToIndexes()
刷新对Hibernate Search管理的索引的更改

如果需要清除()会话,则应同时刷新这两个会话,否则某些实体仍将排队进行索引,但不再进行管理,这是一个问题

当您刷新数据库时,Hibernate Search不会自动刷新索引,因为如果您中止事务,则不会撤消对索引的刷新,因此最好明确决定要进行哪一次(或两次)刷新。

方法
会话#flush()
刷新对数据库的更改。 通过使用
FullTextSession\flushToIndexes()
刷新对Hibernate Search管理的索引的更改

如果需要清除()会话,则应同时刷新这两个会话,否则某些实体仍将排队进行索引,但不再进行管理,这是一个问题


当您刷新数据库时,Hibernate Search不会自动刷新索引,因为如果您中止事务,则不会撤消对索引的刷新,因此最好明确决定要进行哪一次(或两次)刷新。

这对我来说没有完全意义,如果不在for循环中调用session.clear,则可能会出现内存不足异常。Session.clear()应该只是清除一级缓存,而不是关闭会话,对吗?我有其他应用程序,我做同样的事情,我没有问题。我能想到的唯一一件事是,可能是那些被懒散加载的关系表造成的?批量插入的示例那么您是否尝试过使用事务进行更新操作?是的,这是由框架会话管理器处理的,对我来说没有任何意义,如果您不在for循环中调用session.clear,您将面临内存不足异常的风险。Session.clear()应该只是清除一级缓存,而不是关闭会话,对吗?我有其他应用程序,我做同样的事情,我没有问题。我能想到的唯一一件事是,可能是那些被懒散加载的关系表造成的?批量插入的示例那么您是否尝试过使用事务进行更新操作?是的,这是由框架会话管理器处理的,对我来说没有任何意义,如果您不在for循环中调用session.clear,您将面临内存不足异常的风险。Session.clear()应该只是清除一级缓存,而不是关闭会话,对吗?我有其他应用程序,我做同样的事情,我没有问题。我能想到的唯一一件事是,可能是那些被懒散加载的关系表造成的?批量插入的示例那么您是否尝试过使用事务进行更新操作?是的,这是由框架会话管理器处理的,对我来说没有任何意义,如果您不在for循环中调用session.clear,您将面临内存不足异常的风险。Session.clear()应该只是清除一级缓存,而不是关闭会话,对吗?我有其他应用程序,我做同样的事情,我没有问题。我能想到的唯一一件事是,可能是那些被懒散加载的关系表造成的?批量插入的示例那么,您是否尝试过使用事务进行更新操作?是的,这由框架会话管理器处理—正是我要找的答案,工作得很好—谢谢。正是我要找的答案,工作得很好—谢谢。正是我要找的答案,非常好,谢谢。正是我想要的答案