如果你在調用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){ Properties p = configuration.getProperties(); |
如果需要改變Schema,就需要在需要的時候調用此方法
比如在SchemaAction中
HibernateSessionFactory.rebuildSessionFactoryForChangeSchema("POI_SHANGHAI"); System.out.println(" change successfully ---");
PoiDAO pd = new PoiDAO(); pd.save(new Poi("jsfjksdf")); |
那麼,原來,是向POI_BEIJING中插入數據的,變成了向POI_SHANGHAI中插入一條數據了.
通過這種方法,可以實現在操作不同的Schema的時候實現切換.
問題:此處改變的是靜態工廠.所以,會對所有的用戶產生影響.如果不想對所有的用戶改變,那麼可以根據Schema的名稱來取得自己對應的SessionFactoy就可以了.
[火星人 ] 在Hibernate中動態切換Schema已經有927次圍觀