程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 在Hibernate中動態切換Schema

在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就可以了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved