gpt4 book ai didi

java - Hibernate schema 生成 : same configurations, 不同行为

转载 作者:行者123 更新时间:2023-12-01 14:12:59 25 4
gpt4 key购买 nike

我正在做一个项目,遇到了一个非常令人困惑的问题。

一些上下文:该项目是一个相当标准的 Java 7 项目,使用 Maven 3.0.4 作为构建工具,使用 spring (3.2.3.RELEASE) 进行依赖注入(inject)。 Hibernate (4.1.12.Final) 用于持久化。

当运行持久性相关的单元测试(使用Spring的AbstractTransactionalJUnit4SpringContextTests)时,模式是在仅为测试创建的临时数据库中创建的(使用hibernate的 hibernate.hbm2ddl.auto=update 属性)。

这一切在我的开发机器(Linux Mint 12)上运行得很好。然而,当在我的笔记本电脑(最近安装的 Linux Mint 15)上运行完全相同的代码时,我发现 Hibernate 没有创建任何外键

这尤其奇怪,因为:

  • 我正在运行从头开始构建的完全相同的软件(相同的结帐)(已清除的 .m2 存储库)
  • 使用完全相同的 Maven 版本 (3.0.4)
  • 具有相同的 Spring 和 Hibernate 版本(因为这些版本是在使用源代码 checkout 的 Maven 构建配置中配置的)
  • 使用几乎相同的 Postgresql 数据库(工作计算机上的软件包版本为 9.1.9-0ubuntu11.10,笔记本电脑上的软件包版本为 9.1.9-1ubuntu1),它们具有完全相同的配置(除了区域设置之外)
  • 使用 postgres super 用户访问数据库,因此权限不是问题

通常我很擅长找出任何奇怪问题的根源,但这绝对让我感到困惑。我看不出任何可能导致此问题的相关差异......任何有关如何查找其原因的线索将不胜感激!

我可以看到此问题的 2 个可能的线索:

  • 我在笔记本电脑上摆弄了一些区域设置,这是否会导致此问题?
  • 在下面的 Hibernate 属性中,您可以看到使用了 PostgreSQL82Dialect。我找到了this Hibernate forum thread其中提到了以下内容:

I saw you're using ProgressDialect and this dialect does not support altering of tables (ProgressDialect.hasAlterTable() returns false).

这似乎是导致此问题的最佳原因,但是我仍然无法理解为什么它在一个设置上工作而在另一个设置上不起作用,因为两个设置上的 Hibernate 配置是相同的...

一些额外信息:

Hibernate 配置(尽管这在两种设置上都是相同的!):

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceProviderClass" value="org.hibernate.ejb.HibernatePersistence" />
<property name="persistenceUnitManager" ref="jpaPersistenceUnitManager" />
<property name="jpaDialect" ref="hibernateJpaDialect" />
<property name="jpaProperties">
<props>
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
<prop key="hibernate.cache.use_minimal_puts">false</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.use_structured_entries">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQL82Dialect</prop>
<prop key="hibernate.generate_statistics">false</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.jdbc.use_get_generated_keys">false</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="net.sf.ehcache.configurationResourceName">/ehcache-unity-persistence.xml</prop>
</props>
</property>
</bean>

如果您认为有帮助,请随时索取更多信息!或者,如果您希望我检查/尝试某些内容,请告诉我!

这真让我烦恼!

最佳答案

好的,Hoàng Long 给出的查看日志的提示让我找到了答案:显然我的数据库已损坏。

一切都会完美运行,除了用于创建外键限制的“ALTER TABLE”语句,该语句会因错误而失败。

显然我的 postgresql 安装搞砸了......

关于java - Hibernate schema 生成 : same configurations, 不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18353013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com