我正在开展一个项目并遇到了一个令人困惑的问题。
某些上下文:该项目是一个相当标准的Java 7项目,使用Maven 3.0.4作为构建工具,使用spring(3.2.3.RELEASE)进行依赖注入。 Hibernate(4.1.12.Final)用于持久化。
当运行与持久性相关的单元测试(使用Spring的AbstractTransactionalJUnit4SpringContextTests)时,模式是在仅为测试创建的临时数据库中创建的(使用hibernate的hibernate.hbm2ddl.auto = update属性)。
这一切都适用于我的开发机器(Linux Mint 12)。 但是,当我的笔记本电脑上运行完全相同的代码时(最近安装的Linux Mint 15),我发现Hibernate 没有创建任何外键。
这一点特别奇怪:
通常我很擅长找到任何奇怪问题的根源,但这绝对令我感到困惑。我看不出任何可能导致这种情况的相关差异...... 如何找到原因的任何线索将不胜感激!
我可以看到这个问题的两个可能的线索:
我看到你正在使用ProgressDialect,这个方言不支持更改表格(ProgressDialect.hasAlterTable()返回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>
如果您认为可以提供帮助,请随时提出更多信息! 或者,如果您希望我查看/尝试一下,请告诉我!
这真让我烦恼!
答案 0 :(得分:1)
好的,来自HoàngLong的小费看日志让我得到答案: 显然我的数据库已经腐败了。
除了用于创建外键约束的'ALTER TABLE'语句之外,所有内容都可以正常工作,这些语句会因错误而失败。
显然我的postgresql安装搞砸了......