在Hibernate中动态切换Schema[Java编程]
本文“在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便可以了.
以上是“在Hibernate中动态切换Schema[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |