在Hibernate里面动态切换SChema实现访问不同的数据库的几种方法
来源:互联网 发布:淘宝相片拍摄 编辑:程序博客网 时间:2024/05/10 12:45
需求很简单,相同的操作,比如表结构完全相同,程序也完全相同,但需要根据某些条件,分别向不同的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实现访问不同的数据库的几种方法
- 在Hibernate里面动态切换SChema实现访问不同的数据库的几种方法
- 在Hibernate里面动态切换SChema实现访问不同的数据库的几种方法
- 在Hibernate里面动态切换SChema实现访问不同的数据库的几种方法
- LabVIEW中访问数据库的几种不同方法
- hibernate访问数据库的几种方式
- strlen的几种不同实现方法
- 访问数据库的几种方法
- 怎样在MDI程序里面切换不同的 视图?
- spring+hibernate架构中Dao访问数据库的几种方法
- spring+hibernate架构中Dao访问数据库的几种方法
- spring+hibernate架构中Dao访问数据库的几种方法
- spring+hibernate架构中Dao访问数据库的几种方法
- spring+hibernate架构中Dao访问数据库的几种方法
- 几种可以实现在不同设备动态正常显示表格数据的方式
- 在JTable里面添加JCheckBox的几种方法
- spring和hibernate指定DB2数据库schema的方法
- jdbc访问数据库的不同方法
- 边滚边停的JS图片滚动
- Mantis的连接数据库密码和登录用户密码修改
- xp+ubuntu双系统上重装Xxp后修复grub方法
- 高效的javascript 幻灯片
- asp.net 操作Access数据库,sql
- 在Hibernate里面动态切换SChema实现访问不同的数据库的几种方法
- -1真的比1小吗?
- 公有继承 保护继承 私有继承 自己总结!
- 41个 IE layout BUG
- 数据库 SQL 遍历父子关系表(二叉树)获得所有子节点 所有父节点
- 关于联通API接口收不到上行短信问题
- ora-01034 ,ora-27101
- Xpath 笔记
- asp.net 随机生成数字,asp.net随机生成字母数字