首页 > 解决方案 > 多线程情况产生 UnknownEntityTypeException: Unable to locate persister

问题描述

我看到其他文章在谈论这个错误,但我看到的没有一篇是非常正确的。我的情况是我有一个现有的石英任务,可以按计划处理记录。写在春天和冬眠中,效果很好。新要求,我们即将获得大量洪水,此过程无法按书面方式处理。因此,除了一些其他优化之外,我还尝试对它进行多线程处理。

我声明并正在使用 Spring 的 TaskExecutor,它肯定会调用新线程,但是一旦我运行查询,我就会得到:

org.hibernate.UnknownEntityTypeException: Unable to locate persister: 119129
at org.hibernate.metamodel.internal.MetamodelImpl.locateEntityPersister(MetamodelImpl.java:647) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final]
at org.hibernate.internal.SessionImpl.locateEntityPersister(SessionImpl.java:2951) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final]

我对 TaskExecutor 的声明(不为空,因此正在创建和注入):

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTask​​Executor"></bean>

我在哪里启动线程:

    ProcessQueueWorkerThread worker = new ProcessQueueWorkerThread(this);
    taskExecutor.execute(worker);
    workers.add(worker);
          

并且线程本身和休眠是非常无趣的。查询本身是一个简单的 session.get(id, class); 这是一个在主线程中被识别的类。我需要做其他事情来启动这个线程吗?我假设我错过了一步,但我做了我所遵循的例子。

标签: javaspringmultithreadinghibernatejpa

解决方案


好的,事实证明这与线程或弹簧无关。只是一个非常、非常无用和误导性的例外。问题是在重组到多线程结构中,我将一个字符串传递给 session.get() 以获得整数键列。就是这样。我为这么简单的事情浪费了这么多时间而感到难过,但是一个像样的错误会为我节省几个小时的时间。


推荐阅读