如何在运行时更改 Hibernate 的 SessionFactory 的默认架构设置?
Posted
技术标签:
【中文标题】如何在运行时更改 Hibernate 的 SessionFactory 的默认架构设置?【英文标题】:How can I change Hibernate's SessionFactory's default schema setting at runtime? 【发布时间】:2016-08-05 05:34:30 【问题描述】:我们在 XML 中配置我们的会话工厂 bean。默认会话名称是从代码资源文件夹中的属性文件中读取的。出于新的目的,我需要能够在运行时将默认模式属性更改为其他内容。我不知道怎么做。
会话工厂在 XML 连接中创建如下:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.default_schema">$oracle.default_schema</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.generate_statistics">false</prop>
... other properties ...
</props>
</property>
... lots of mapping files and annotated classes ...
我想我可以将会话工厂从 Spring 的上下文中拉出来,也许提供一个 Properties 类来(我希望)覆盖默认的会话属性而不是其他任何东西,然后愉快地继续前进。
不幸的是,当我尝试从上下文中获取会话工厂 bean 时,它的类型是 SessionFactoryImpl
而不是 AnnotationSessionFactoryBean
。这意味着我无法使用setHibernateProperties()
方法。
我也不确定是否可以致电ALTER SESSION
。因为会话工厂是由我们在库中的 DAO 类获得的,所以我没有一种简单的方法来用必要的代码包装会话工厂。
有什么想法吗?
【问题讨论】:
【参考方案1】:创建多个 JPA 配置文件,为您要支持的每个环境创建一个,然后将其导入到您的 spring 配置中。
<import resource="classpath:services-environment-$environment.name.xml"/>
对我来说,有一个用于 prod、test 和每个用户的文件,通过设置 environment.name 系统属性,加载了正确的 JPA 配置。
【讨论】:
以上是关于如何在运行时更改 Hibernate 的 SessionFactory 的默认架构设置?的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate中Session的load()和get()方法如何使用,举列子说明
如何在应用程序启动时从 java 代码更改 Hibernate connection.url 属性
hibernate中一种导致a different object with the same identifier value was already associated with the sess