专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » hibernateschema:在Hibernate里面动态切换SChema实现访问区别的数据库的几种思路方法 »正文

hibernateschema:在Hibernate里面动态切换SChema实现访问区别的数据库的几种思路方法

来源: 发布时间:星期日, 2009年9月6日 浏览:0次 评论:0
在Hibernate里面动态切换SChema实现访问区别<img src='/icons/40329de.gif' />数据库<img src='/icons/40329de.gif' />几种思路方法(1) - 收藏本文



  在时候动态指定Schema参数就行了比如

public  SessionFactory rebuildSessionFactoryForChangeSchema(String Schema){   
       try {   
           Properties p = configuration.getProperties;   
           .out.prln("---" + p);   
           p.put("hibernate.default_schema", Schema);   
           sessionFactory = configuration.buildSessionFactory;   
           .out.prln(" change schema successfully ......... ");   
            sessionFactory;   
       } catch (Exception e) {   
           .err   
                   .prln("%%%% rebuild session factory failed for changing schema %%%%");   
           e.prStackTrace;   
            null;   
       }   
   }  


  这个思路方法能实现切换但是我们必须每次都返回个SessionFactory, 否则在并发时候就会出问题hibernate.default_schema系统只有

  思路方法 2:

  使用多重配置比如针对天津和北京我们分别编写对应映射文件

<?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>  
    < name="com.csc.poimanager.dao.Poi" table="POI" id="P_BEIJING" schema="P_BEIJING">  
        <id name="poiId" type="java.lang.Long">  
            <column name="POI_ID" precision="10" scale="0" />  
            <generator ="increment" />  
        </id>  
        <property name="cnName" type="java.lang.String">  
            <column name="CN_NAME" length="1000" />  
        </property>  
    </>  
    < name="com.csc.poimanager.dao.Poi" id="P_TIANJIN" table="POI" schema="P_TIANJIN">  
        <id name="poiId" type="java.lang.Long">  
            <column name="POI_ID" precision="10" scale="0" />  
            <generator ="increment" />  
        </id>  
        <property name="cnName" type="java.lang.String">  
            <column name="CN_NAME" length="1000" />  
        </property>  
    </>  
</hibernate-mapping>  




  配置文件除了SCHEMA和ID区别外其它完全相同那么如何使用呢?

  sessionFactory.getBean("P"+placeName);

  这样就可以实现动态

  至于placeName可以通过前台传递过来也可以放到ThreadLocal里面后者更具有通用性而且对以前修改量最少只需要写个getPlaceName得思路方法就行了

  思路方法3:

  修改数据库连接属性将以前指向SchemaA改成指向SchemaB,这需要些高权限账号做这些事情

  其实还有个更简单思路方法那就是自己继承个DataSource,然后在思路方法里面根据ThreadLocal参数返回区别数据连接比如如果是BEIGJING,则返回 BeiJingDatasource连接如果是TIANJIN则返回TianJinDatasource连接

  系统在使用时肯定会从DataSource里面获取连接我们在内部做了分配自然前台运行结果也就分配开了

  提示:在你DataSource里面可以包含Map<String,DataSource>这样结构来做内部转发

  个人整理总结:

  第种思路方法只适合于单机单线程使用

  第 2个思路方法相对技术难度低单配置起来要写多份维护比较麻烦

  第 3个思路方法技术难度高单维护起来简单

  我个人当然是用第 3个思路方法了很有趣



页12="current">3


最近更新最后刷新时间:2009-09-06 00:46:38

  • gird分页时form和url参数探讨
  • 用spring简单实现发送邮件
  • iphone学习的旅的例子:LED电子时钟
  • Java对数据库串字段进行压缩保存尝试
  • 在Hibernate里面动态切换SChema实现访问区别数据库几种思路方法
  • Java和C#运行命令行例子对比
  • Java或C#命令行批处理命令如何获得返回值
  • Java里如何得到00:00:00格式时分秒Timestamp
  • 设计者-开发者工作流中迭代模式
  • Java序列化机制和原理


最新资讯

  • ·Sybase发布全新PowerBuilder 12
  • ·微软拟招聘近百名搜索工程师 加强Bing实力
  • ·Java EE 6依赖注入终于达成致了
  • ·Scheme语言即将被分为 2
  • ·连贯NHibernate正式发布1.0候选版
  • ·Java EE 6新特性尝鲜:EJB 3.1重要变化总览
  • ·和我共同了解Java是什么
  • ·JSR 299(Java EE 平台上下文和依赖注入)最终建议草案
  • ·Java编程语言 8大优点
  • ·探秘Java 7模块化 类路径永远消失
  • ·JavaOne 2009第 2天:揭示Java领域几大趋势
  • ·JavaOne 2009第天:Java软件Software商店启动 甲骨文CEO登场
  • ·RIA的争 JavaFX是否能后来居上?
  • ·JavaFX还有戏吗?
  • ·Web开发谁更高效 Java对决Ruby _disibledevent=> 专题推荐

    • · Java Netbeans 专题
    • · Java Eclipse 专题
    • · Java JDK 专题
    • · Java JBuilder 专题
    • · Java JBoss 专题
    • · Java JDeveloper 专题
    • · Java 线程专题
    • · Java Comparator 专题
    • · Java SE 6 专题
    • · Java 异常专题
    • · 让开发自动化
    • · 更多java专题……



    有关我们 | 联系我们 | 版权申明 | 广告服务 | 网站WebSite律师 | 报告 | 免责条款

    Copyright © 2002 - 2009 ddvip All Rights Reserved

    版权所有



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: