在Hibernate里面动态切换SChema实现访问不同的数据库的几种方法

转载 2012年02月15日 15:28:08

在Hibernate里面动态切换SChema实现访问不同的数据库的几种方法时间:2009-11-09 csdn博客 老紫竹 需求很简单,相同的操作,比如表结构完全相同,程序也完全相同,但需要根据某些条件,分别向不同的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系统只有一个。

本文来自编程入门网:http://www.bianceng.cn/Programming/Java/200911/12028.htm

 

在Hibernate里面动态切换SChema实现访问不同的数据库的几种方法

需求很简单,相同的操作,比如表结构完全相同,程序也完全相同,但需要根据某些条件,分别向不同的schema做操作。比如,如果当前处理的是A公司,那么向SchemaA 里面保存数据,如果当前处理的是B公司...
  • java2000_net
  • java2000_net
  • 2009年08月21日 09:11
  • 6987

hibernate访问数据库的几种方式

package com.carInsur.model.dao; import java.util.ArrayList; import java.util.Iterator; import...
  • petercnmei
  • petercnmei
  • 2014年04月29日 15:33
  • 921

Spring Boot动态数据源切换实现

Spring Boot实现动态数据源切换可以先参看下http://blog.csdn.net/zero__007/article/details/48711017,了解大致下实现的原理。      ...
  • zero__007
  • zero__007
  • 2017年10月23日 18:00
  • 323

利用AbstractRoutingDataSource实现动态数据源切换 (一、Spring+Hibernate)

一、开篇 这里整合分别采用了Hibernate和MyBatis两大持久层框架,Hibernate主要完成增删改功能和一些单一的对象查询功能,MyBatis主要负责查询功能。所以在出来数据库方言的...
  • u010395804
  • u010395804
  • 2015年02月28日 10:40
  • 1862

Hibernate&amp;Spring对多数据源、多Schema的支持

Hibernate&Spring对多数据源、多Schema的支持 @author:WMsteve @Email:weisteve@yeah.net @Time:2011年12月30日17:02:...
  • sTeVes
  • sTeVes
  • 2014年04月03日 16:18
  • 3177

MyBatis与Hibernate更改schema的方…

Hibernate需要在xml文件里面注释~~             一个class标签对应一个实体类         name属性指定实体类名称     ...
  • u010770993
  • u010770993
  • 2017年04月21日 10:52
  • 966

关于Oracle创建存储过程时,访问不同Schema下的表报错:ORA-00942的问题

问题描述: 在将一个存储过程从不同SID下合并到同一SID下时,出现了上述问题: ORA-00942: table or view does not exist 解决过程: 查看存储过程,原来...
  • xiaoyaocao2000
  • xiaoyaocao2000
  • 2012年09月20日 21:51
  • 360

数据库连接的扩展以及动态切换

前几天完成了一个很小的java项目,尽管项目很小,但是有不错的设计,与大家分享下遇到的问题以及解决方案。 问题:项目中需要能够操作多个数据库,并且要有不错的扩展性,随时添加数据库连接。 其实这个需求还...
  • rogeshu
  • rogeshu
  • 2013年11月23日 21:09
  • 1188

访问数据库的几种方法

这部分很基础,但是如果搞不清楚,对以后的学习会有影响。 SQL> select * from v$version where rownum=1; BANNER -------------...
  • BAT_os
  • BAT_os
  • 2015年05月17日 02:26
  • 1166

EF6 Database First (DbContext) - Change Schema at runtime

Problem:There are two SQL databases (dev and live) with on Azure which has identical table structure...
  • jameszhou
  • jameszhou
  • 2015年11月19日 20:22
  • 2249
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Hibernate里面动态切换SChema实现访问不同的数据库的几种方法
举报原因:
原因补充:

(最多只允许输入30个字)