hibernate学习之schema

来源:互联网 发布:如何域名 指向 端口 编辑:程序博客网 时间:2024/05/17 07:50

oracle中,不同的用户,使用不同的schema.所以,如果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的时候实现切换。
原创粉丝点击