在Hibernate里面动态切换SChema实现访谒差别的数据库的几种办法[Java编程]
本文“在Hibernate里面动态切换SChema实现访谒差别的数据库的几种办法[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
需求很简单,相同的操作,比方表构造完好相同,程序也完好相同,但需求按照某些条件,辨别向差别的schema做操作.
比方,假如当前处理的是A公司,那么向SchemaA 里面保存数据,假如当前处理的是B公司的,则向SchemaB里面保存数据.
其实就是一套程序,实现后台的动态切换.
我这里供应几种办法,大家自己按照情形考虑,都能实现,注意是实现,不一定合适于正式利用.
办法一:
在Hibernate里面,有一个配置参数,比方下面这个带Schema配置的映射
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.csc.poimanager.dao.Poi" table="POI" schema="P_BEIJING">
<id name="poiId" type="java.lang.Long">
<column name="POI_ID" precision="10" scale="0" />
<generator class="increment" />
</id>
<property name="cnName" type="java.lang.String">
<column name="CN_NAME" length="1000" />
</property>
</class>
</hibernate-mapping>
此中的schema="P_BEIJING"将 Schema写死了.
我们可以不写这部份,而是利用系统的配置参数
<property name="hibernate.default_schema">POI_BEIJING</property>
这样的话,我们的映射文件就变成了
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.csc.poimanager.dao.Poi" table="POI"">
<id name="poiId" type="java.lang.Long">
<column name="POI_ID" precision="10" scale="0" />
<generator class="increment" />
</id>
<property name="cnName" type="java.lang.String">
<column name="CN_NAME" length="1000" />
</property>
</class>
</hibernate-mapping>
在调用的时刻,动态的指定Schema的参数就行了,比方
public static SessionFactory rebuildSessionFactoryForChangeSchema(String newSchema){
try {
Properties p = configuration.getProperties();
System.out.println("---" + p);
p.put("hibernate.default_schema", newSchema);
sessionFactory = configuration.buildSessionFactory();
System.out.println(" change schema successfully ......... ");
return sessionFactory;
} catch (Exception e) {
System.err
.println("%%%% rebuild session factory failed for changing schema %%%%");
e.printStackTrace();
return null;
}
}
这个办法能实现切换,但是我们必须每次都返回一个SessionFactory, 不然在并发的时刻就会出问题.因为hibernate.default_schema系统只有一个.
以上是“在Hibernate里面动态切换SChema实现访谒差别的数据库的几种办法[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |