postgresql - Hibernate 3.4 到 5.1 迁移的 hibernate.hbm2ddl.auto 值 ="update"问题

标签 postgresql hibernate jboss wildfly-10

我有一个目前在 JBoss 6 上运行(没有问题)的应用程序,我正在尝试升级以在 WildFly 10.1 上运行。大部分升级进展顺利。但是,从 Hibernate 3.4(在 JBoss 6 上)升级到 Hibernate 5.1(在 WildFly 10.1 上)会导致一些问题。

具体来说,在我的 persistence.xml 中,我包含以下属性。

<property name="hibernate.hbm2ddl.auto" value="update"/>

请注意:作为升级的一部分,我不会进行任何架构或其他数据库更改。此外,我指的是已在 JBoss 6/Hibernate 3.4 实例下成功运行的同一个数据库实例。因此,我相信包含此属性在首次使用 WildFly 10.1/Hibernate 5.1 版本运行时应该没有实际工作/更新要做。

但是,包含此属性似乎 1) 错误地确定它需要进行更新,并且 2) 无法成功进行更新。它导致以下堆栈跟踪:

Failed to start service jboss.persistenceunit."app.ear#PU": org.jboss.msc.service.StartException in service jboss.persistenceunit."PU": javax.persistence.PersistenceException: [PersistenceUnit: PU] Unable to build Hibernate SessionFactory
      ...
      Caused by: javax.persistence.PersistenceException: [PersistenceUnit: PU] Unable to build Hibernate SessionFactory
      ...
      Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Unable to execute schema management to JDBC target [create index company_id_index on APPROVER (COMPANY_ID)]
      ...
      Caused by: org.postgresql.util.PSQLException: ERROR: relation "company_id_index" already exists

同样,有问题的表和索引已经存在(由最终错误确认)。

Hibernate 现在是否不再区分大小写(COMPANY_ID_INDEX 不同于 company_id_index)?

如果是这样,我如何配置它以使其像以前一样不区分大小写(Postgres 默认所有这些都降低......)

TIA!

最佳答案

呸!打脸掌!我最近发现在使用 Hibernate 3.4/JBoss 6 创建 hbm2ddl 索引时也会发生类似的错误,因为我现在正在使用 Hibernate 5.1/Wildfly 10.1;但是,它们并没有阻止持久性模块的成功启动。本质上,他们只是被巧妙地压制了。我不确定这是否是与 Hibernate 版本相关的预期更改,因为它们会阻止它在 Hibernate 5.1/Wildfly 10.1 中启动?

这里的根本问题原来是索引名称在 Postgres 的整个模式中必须是唯一的。因此,多个实体中的每个实体都具有 COMPANY_ID 列的 FK,每个实体都必须具有唯一的索引名称。索引是 Postgres 中的关系(驱动跨模式需求的唯一性)。

感谢您的建议,对造成的困惑深表歉意。

关于postgresql - Hibernate 3.4 到 5.1 迁移的 hibernate.hbm2ddl.auto 值 ="update"问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39335946/

相关文章:

mysql - 我在哪里可以找到从 JPA 实体生成的数据库脚本?

eclipse - 如何在 Eclipse 中运行/调试 Java Web 服务项目

java - Spring JTA TransactionManager 配置 : Supporting both Tomcat and JBoss

python - 从另一个 postgres 表更新一个 postgres 表

postgresql - 如何向 PostgreSQL 添加自定义聚合函数(例如 MAX/MIN)?

mysql - jpql select查询与where子句不区分非英文字符

hibernate - 使用@SpringBootTest 禁用数据库连接

sql - ORDER BY 列 = 值 desc|asc

asp.net - 配置 ASP.NET 开发服务器以连接到 postgres 数据库

java - 使用 hibernate ,一个表可以有两列相同的外键吗?