当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:16:00  来源:本站整理

在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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 在Hibernate里面动态切换SChema实现访谒差别的数据库的几种办法
  • 在Hibernate中动态切换Schema
  • 在Hibernate中检索战略的操纵详解
  • 在Hibernate中切切当现关联关系中的级联操作(cascading)
  • <b>在Hibernate中处理批量更新和批量删除</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .