在Hibernate中动态切换Schema
当前位置:以往代写 > JAVA 教程 >在Hibernate中动态切换Schema
2019-06-14

在Hibernate中动态切换Schema

在Hibernate中动态切换Schema

假如你在挪用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就可以了。

    关键字:

在线提交作业