【问题标题】:Axon Framework tables names with Oracle + Spring jpa table autogeneration带有 Oracle + Spring jpa 表自动生成的 Axon Framework 表名称
【发布时间】: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_ENTRYTOKEN_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.propertiesapplication.yml 吗?
  • 用属性更新了问题,谢谢
  • 感谢您的更新...我发现了更多与此相关的内容:“Hibernate 的默认命名策略会创建任意长名称,这不适用于 Oracle 的(非常烦人的)限制30 个字符的名称。”。所以它可能默认使用不同的命名策略。你能不能试着改变一下,看看它是否有效?
  • 谢谢我回答了我自己的问题,但是支持这个功能并更改错误消息将是一个不错的功能。谢谢,马特
  • 很高兴为您提供帮助,感谢您提供更新的答案。

标签: java oracle spring-boot hibernate axon


【解决方案1】:

更新

答案如下:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

这会以这种风格创建表格:DOMAINEVENTENTRY 等。

【讨论】:

    猜你喜欢
    • 2021-11-09
    • 2016-10-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 2020-07-27
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多