java - Axon:启用 JPA 存储库提供 errorTokenEntry 时未映射
问题描述
为了在具有 Axon 框架的 Springboot 应用程序中使用多个数据库。我使用了@EnableJpaRepositories,之后我开始出现以下错误
java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: TokenEntry is not mapped [SELECT te.segment FROM TokenEntry te WHERE te.processorName = :processorName ORDER BY te.segment ASC]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:138)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:725)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:816)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:23)
at sun.reflect.GeneratedMethodAccessor107.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:366)
at com.sun.proxy.$Proxy150.createQuery(Unknown Source)
at sun.reflect.GeneratedMethodAccessor107.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:314)
at com.sun.proxy.$Proxy150.createQuery(Unknown Source)
at org.axonframework.eventhandling.tokenstore.jpa.JpaTokenStore.fetchSegments(JpaTokenStore.java:194)
at org.axonframework.eventhandling.TrackingEventProcessor$WorkerLauncher.run(TrackingEventProcessor.java:1195)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: TokenEntry is not mapped [SELECT te.segment FROM TokenEntry te WHERE te.processorName = :processorName ORDER BY te.segment ASC]
at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:79)
at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:220)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:144)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:113)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:73)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:162)
at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:604)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:716)
... 15 common frames omitted
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: TokenEntry is not mapped
at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:169)
at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:91)
at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:79)
... 21 common frames omitted
以下是我启用 JPA 存储库的方式
@Data
@Configuration
@EnableScheduling
@ConfigurationProperties(prefix = "spring.datasource")
@EnableJpaRepositories(
basePackages = {"com.mypackage","org.axonframework.eventhandling.tokenstore.jpa"},
entityManagerFactoryRef = "postgresEntityManager",
transactionManagerRef = "postgresTransactionManager")}
)
public class PostgresConfiguration {
解决方案
有趣的是,我认为这真的可以开箱即用。您是否有机会使用 Spring Boot @tijo?老实说,我假设不是,但它确实给了我一个建议。
当@RegisterDefaultEntities
您使用axon-springboot-starter
. 你可以看到这是在JpaAutoConfiguration
课堂上完成的。
那里正在做的事情如下:
@RegisterDefaultEntities(packages = {
"org.axonframework.eventhandling.tokenstore",
"org.axonframework.modelling.saga.repository.jpa"
})
public class JpaAutoConfiguration { ... }
你介意检查一下这是否有效吗?我在您的配置中看到的主要区别是您只使用"org.axonframework.eventhandling.tokenstorejpa"
基本包。
让我们知道这是否有效!
推荐阅读
- firebase - 使用 Flutter Firebase 存储插件上传文件
- mysql - 使用'table.column = t.column'如何有效(当t是table的缩写时)
- php - 在引导按钮单击时更新数据库
- node.js - 运行 Ionic 4 时找不到模块 node-sass
- react-native - React 导航错误:在调用“reduxfiyNavigator”之前,请调用“createReactNavigationReduxMiddleware”,
- swift - 在 Swift 中完成异步函数执行后,在尾随闭包之外获取一个完全填充的数组
- laravel - 在 laravel 中使用 eloquent 连接 2 个数据库表
- rust - 最小期货回调示例中的“预期生命周期参数”错误?
- java - 如何在heroku中使用angular2代码部署Spring Boot
- groovy - Groovy 中 propertyMissing 方法的静态版本是什么?