如果你在調用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就可以了。
|----------------------------------------------------------------------------------------|
版權聲明 版權所有 @zhyiwww
引用請注明來源 http://www.tkk7.com/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2008-12-24 18:24
zhyiwww 閱讀(3833)
評論(5) 編輯 收藏 所屬分類:
j2ee 、
database