java - 多线程情况产生 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.ThreadPoolTaskExecutor"></bean>
我在哪里启动线程:
ProcessQueueWorkerThread worker = new ProcessQueueWorkerThread(this);
taskExecutor.execute(worker);
workers.add(worker);
并且线程本身和休眠是非常无趣的。查询本身是一个简单的 session.get(id, class); 这是一个在主线程中被识别的类。我需要做其他事情来启动这个线程吗?我假设我错过了一步,但我做了我所遵循的例子。
解决方案
好的,事实证明这与线程或弹簧无关。只是一个非常、非常无用和误导性的例外。问题是在重组到多线程结构中,我将一个字符串传递给 session.get() 以获得整数键列。就是这样。我为这么简单的事情浪费了这么多时间而感到难过,但是一个像样的错误会为我节省几个小时的时间。
推荐阅读
- node.js - Passportjs - 如果路由中不存在“passport.authenticate”作为中间件,则将 req.user 设为“未定义”
- powerbi-desktop - 通过聚合字符串值在 PowerBI 中创建条形图
- plot - Veusz 平滑曲线
- c# - 使用 Microsoft.Web.Administration 应用程序更改身份验证模式
- anylogic - 启动时在 Anylogic 中更改 GIS 路由
- python - 从烧瓶服务器提供大量图像
- visual-studio-code - VScodevim 如何跳转到一个非常大的列位置
- python - sqlite3.OperationalError:靠近“)”:tkinter Python中的语法错误
- php - 当我已经使用工作正常的文章时,如何在 htaccess 中为配置文件用户创建干净的 url
- cassandra - [Ubuntu 20.04]DevCenter 启动时出现错误 java.lang.NoClassDefFoundError: org/w3c/dom/stylesheets/StyleSheet