【发布时间】:2020-12-15 00:49:34
【问题描述】:
我将 Axon Framework 4.1(无 Axon Server)与 Oracle 12.1 和 Spring Boot Jpa 2.3.0 一起使用
当应用程序启动时,我通过这个属性spring.jpa.hibernate.ddl-auto=create 使用休眠来生成我的所有表,包括 Axon 的表。结果我得到了DOMAIN_EVENT_ENTRY、TOKEN_ENTRY等格式的名字。
之后,当我发送命令时,我收到以下错误消息:An event for aggregate [2] at sequence [0] could not be persisted。
我认为这是因为 Axon 搜索名称为:DOMAINEVENTENTRY 的表但没有找到它,我收到了错误消息。当我将 DOMAIN_EVENT_ENTRY 表重命名为 DOMAINEVENTENTRY 时,一切都开始运行良好。
如果我猜对了,这就是问题所在。但另一方面,我将 Axon 与 H2 一起使用,它使用名称 DOMAIN_EVENT_ENTRY,所以我猜这是 Oracle 特定的问题?
所以我的问题是如何配置 Axon 表名称以生成正确名称的表而无需 hack。
并认为在这种情况下最好提供更详细的错误消息。为什么我的事件无法持久化。
我与问题相关的属性:
hibernate.dialect=org.hibernate.dialect.Oracle12cDialect
spring.jpa.hibernate.ddl-auto=create
spring.jpa.generate-ddl=true
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver.class=oracle.jdbc.driver.OracleDriver
谢谢, 伴侣
【问题讨论】:
-
你好 polosoft,这似乎是由于命名策略和数据库使用不区分大小写的表名。我们可以查看您的
application.properties或application.yml吗? -
用属性更新了问题,谢谢
-
感谢您的更新...我发现了更多与此相关的内容:“Hibernate 的默认命名策略会创建任意长名称,这不适用于 Oracle 的(非常烦人的)限制30 个字符的名称。”。所以它可能默认使用不同的命名策略。你能不能试着改变一下,看看它是否有效?
-
谢谢我回答了我自己的问题,但是支持这个功能并更改错误消息将是一个不错的功能。谢谢,马特
-
很高兴为您提供帮助,感谢您提供更新的答案。
标签: java oracle spring-boot hibernate axon