使用Hibernate自动创建表时请注意下default_schema

使用Hibernate自动创建表的同学请注意下了!

Oralce数据库环境下,有两个Scheme ,如Scheme 1与Scheme 2;并且Scheme 1的user具有DBA权限,能够访问到Scheme 2中的T_CONFIG表(假设T_CONFIG表在Scheme 2中已经存在)。那么在Scheme 1中使用Hibernate的自动创建表T_CONFIG时,可能出现在Scheme 1中不能创建T_CONFIG表的情况。

无意中发现这个问题的,启动项目时,没有正常打印出INFO org.hibernate.tool.hbm2ddl.TableMetadata - foreign keys: [] 日志,本来以为是Hibernate不能自动创建表的原因,于是重新建了个用户,只给予此用户Resouce与connect角色权限,配置好后重启应用发现能够自动创建表(但是还是没看到校验的日志信息);诧异了中看了下Hibernate的源码,发现如果不配置default_schema那么程序将使用默认的Environment.DEFAULT_SCHEMA(从hibernate.properties文件中获取,hibernate.properties没有配置就是null)。

解决方法,如果是用了spring+hibernate配置如下:

<bean name="hibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">

<property name="properties">

<props>

<prop key="hibernate.default_schema">${hibernate.default_schema}</prop>

<!--其他配置-->

</props>
</property>
 </bean>

扫描二维码关注公众号,回复: 733658 查看本文章

至于校验信息不能打印出来是由于slf4j两个包冲突了,去掉slf4j-log4j12就可以正常显示了。

如果不想使用Hibernate的自动创建表功能,只要不设置此参数局可以了,spring默认注入此参数是false

<property name="schemaUpdate" value="${hibernate.schema_update}"/>

猜你喜欢

转载自tedtian.iteye.com/blog/1871882