hibernate使用小结

本人 属于菜鸟 刚开始写blog 所以前面的文章都是 转过来的。借鉴,学习。目的为自己了技术 加深印象。

Hibernate有很多值得学习的地方,这里我们主要介绍Hibernate schema,包括介绍切换Schema等方面。

Hibernate schema

如果你在调用Hibernate的时候需要切换schema怎么办呢。

在oracle中,不同的用户,使用不同的schema.在Hibernate的POJO中,会指定了schema

 
 
  1. <? xml   version = "1.0"   encoding = "utf-8" ?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >  
  4. <!--  
  5. Mapping file autogenerated by MyEclipse Persistence Tools  
  6. -->  
  7. < hibernate-mapping >  
  8. < class   name = "com.csc.poimanager.dao.Poi"   table = "POI"   schema = "P_BEIJING" >  
  9. < id   name = "poiId"   type = "java.lang.Long" >  
  10. < column   name = "POI_ID"   precision = "10"   scale = "0"   />  
  11. < generator   class = "increment"   />  
  12. </ id >  
  13. < property   name = "cnName"   type = "java.lang.String" >  
  14. < column   name = "CN_NAME"   length = "1000"   />  
  15. </ property >  
  16. </ class >  
  17. </ hibernate-mapping >  

上面的代码部分,就指定了Schema.如果在操作的时候想切换Schema.操作如下:

默认的配置<property name="Hibernate.default_schema">POI_BEIJING</property>

上面的映射文件改为:

 
 
  1. <? xml   version = "1.0"   encoding = "utf-8" ?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >  
  4. <!--  
  5. Mapping file autogenerated by MyEclipse Persistence Tools  
  6. -->  
  7. < hibernate-mapping >  
  8. < class   name = "com.csc.poimanager.dao.Poi"   table = "POI"   >  
  9. < id   name = "poiId"   type = "java.lang.Long" >  
  10. < column   name = "POI_ID"   precision = "10"   scale = "0"   />  
  11. < generator   class = "increment"   />  
  12. </ id >  
  13. < property   name = "cnName"   type = "java.lang.String" >  
  14. < column   name = "CN_NAME"   length = "1000"   />  
  15. </ property >  
  16. </ class >  
  17. </ hibernate-mapping >  

在操作的,可以用下面的方法来重新build你的SessionFactory

 
 
  1. public static void rebuildSessionFactoryForChangeSchema(String newSchema){  
  2. try {  
  3.  
  4. Properties  p  =  configuration .getProperties();  
  5. System.out.println("---" + p);  
  6. p.put("hibernate.default_schema", newSchema);  
  7. sessionFactory  =  configuration .buildSessionFactory();  
  8. System.out.println(" change schema successfully ......... ");  
  9. } catch (Exception e) {  
  10. System.err  
  11. .println("%%%% rebuild session factory failed for changing schema %%%%");  
  12. e.printStackTrace();  
  13. }  

如果需要改变Schema,就需要在需要的时候调用此方法。

比如在SchemaAction中

 
 
  1. HibernateSessionFactory.rebuildSessionFactoryForChangeSchema("POI_SHANGHAI");  
  2.  
  3. System.out.println(" change successfully---");  
  4.  
  5. PoiDAO  pd  =  new  PoiDAO();  
  6. Transaction  t  = pd .getSession().beginTransaction();  
  7.  
  8. pd.save(new Poi("jsfjksdf"));  
  9. t.commit(); 

那么,原来,是向POI_BEIJING中插入数据的,变成了向POI_SHANGHAI中插入一条数据了。通过这种方法,可以实现在操作不同的Schema的时候实现切换。

问题:此处改变的是静态工厂。所以,会对所有的用户产生影响。如果不想对所有的用户改变,那么可以根据Schema的名称来取得自己对应的SessionFactoy就可以了。以上介绍Hibernate schema。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值