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

在Hibernate中动态切换Schema[Java编程]

赞助商链接



  本文“在Hibernate中动态切换Schema[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

假如你在调用hibernate的时刻需求切换scheme怎么办呢.

在oracle中,差别的用户,利用差别的schema.在hibernate的POJO中,会指定了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.假如在操作的时刻想切换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>

在操作的,可以用下面的办法来重新build你的SessionFactory

  public static void 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 ......... ");
    } catch (Exception e) {
      System.err
          .println("%%%% rebuild session factory failed for changing schema %%%%");
      e.printStackTrace();
    }
  }

假如需求改变Schema,就需求在需求的时刻调用此办法

比方在SchemaAction中

   HibernateSessionFactory.rebuildSessionFactoryForChangeSchema("POI_SHANGHAI");
  System.out.println(" change successfully ---");
  PoiDAO pd = new PoiDAO();
    Transaction t =pd.getSession().beginTransaction();
  pd.save(new Poi("jsfjksdf"));
    t.commit();

那么,本来,是向POI_BEIJING中插入数据的,变成了向POI_SHANGHAI中插入一条数据了.

通过这种办法,可以实目前操作差别的Schema的时刻实现切换.

问题:此处改变的是静态工厂.所以,会对全部的用户产生影响.假如不想对全部的用户改变,那么可以按照Schema的名称来获得自己对应的SessionFactoy便可以了.


  以上是“在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 .