重建Hibernate的SessionFactory的方法(不重启服务)
来源:互联网 发布:淘宝用户行为隐私保护 编辑:程序博客网 时间:2024/05/16 09:33
转载请注明出处:http://blog.csdn.net/sunyujia/
声明:本方法没有进行过除如下测试用例外的任何测试,不保证其稳定性,重建SessionFactory是非常危险的,本文只在于研究和学习。
没有深入研究过hibernate后台的机制,只是为了帮助论坛上的网友解决一个实际的问题,看了下Configuration类的源码,发现是protected的,写了个类继承它,改为public后,测试通过,本来没想到这么简单,不过暂时来看确实简单。不好意思发表,鉴于任何网络资源都会有益于人,还是发出来了。共广大程序员百度搜之。
本方法适合动态修改数据库表结构。例如提供给用户自定义表单功能。
- package com.syj.domain.test;
- import java.io.File;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.cfg.Configuration;
- import com.syj.domain.User;
- /**
- * <p>
- * Title: 重新创建SessionFactory的测试类
- * </p>
- *
- * <p>
- * Copyright: 转载请注明出处http://blog.csdn.net/sunyujia/
- * </p>
- *
- * @author 孙钰佳
- * @main sunyujia@yahoo.cn
- * @date Oct 6, 2008 8:38:11 PM
- */
- public class ResetHbmTest {
- /**
- * Description: 测试用例
- *
- * @param args
- * @throws Exception
- * @blog ht tp://blog.csdn.net/sunyujia/
- * @mail sunyujia@yahoo.cn
- * @since:Oct 6, 2008 8:38:11 PM
- */
- public static void main(String[] args) throws Exception {
- HibernateConfiguration configuration = new HibernateConfiguration();
- configuration.configure("/hibernate.cfg.xml");
- SessionFactory sessionFactory = configuration.buildSessionFactory();
- Session session = sessionFactory.openSession();
- session.beginTransaction();
- User u1 = new User();
- session.save(u1);
- session.getTransaction().commit();
- session.refresh(u1);
- System.out.println("user Id:" + u1.getId() + " name:" + u1.getName());
- sessionFactory.close();
- testReplaceXml();// 改变pojo xml文件
- configuration.reset();// 重置
- configuration.configure("/hibernate.cfg.xml");
- sessionFactory = configuration.buildSessionFactory();// buildSessionFactory
- session = sessionFactory.openSession();
- session.beginTransaction();
- User u2 = new User();
- session.save(u2);
- session.getTransaction().commit();
- session.refresh(u2);
- System.out.println("user Id:" + u2.getId() + " name:" + u2.getName());
- }
- /**
- *
- * Description:测试修改User.hbm.xml ,为了简单没考虑太多 简单替换
- *
- * @throws Exception
- * @mail sunyujia@yahoo.cn
- * @since:Oct 6, 2008 8:55:28 PM
- */
- public static void testReplaceXml() throws Exception {
- File file = new File(User.class.getResource("User.hbm.xml").getFile());
- String userHbmXml = org.apache.commons.io.FileUtils.readFileToString(
- file, "UTF-8");
- userHbmXml = userHbmXml.replaceAll("(select 1)", "(select 2)");
- org.apache.commons.io.FileUtils.writeStringToFile(file, userHbmXml);
- }
- }
- class HibernateConfiguration extends Configuration {
- public HibernateConfiguration() {
- super();
- }
- public void reset() {
- super.reset();// 关键在这里,这个方法是protected的通过继承转换为public
- }
- }
- <?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">
- <hibernate-mapping>
- <!-- ht tp://blog.csdn.net/sunyujia/ -->
- <class name="com.syj.domain.User" table="Syj_User" schema="dbo" catalog="pubs">
- <id name="id" type="java.lang.Integer">
- <column name="id" />
- <generator class="identity" />
- </id>
- <property name="name" type="java.lang.String">
- <formula>(select 1)</formula>
- </property>
- </class>
- </hibernate-mapping>
测试结果如下
user Id:38 name:1
user Id:39 name:2
可以看出已经生效了。
- 重建Hibernate的SessionFactory的方法(不重启服务)
- hibernate SessionFactory的获取方法
- hibernate 获取SessionFactory的方法
- Hibernate的Transaction SessionFactory
- Hibernate 的 SessionFactory接口
- Hibernate的sessionFactory
- 重建sessionFactory时应该注意的事情
- spring配置hibernate的sessionFactory的几种方法GOOD
- spring配置hibernate的sessionFactory的几种方法
- spring配置hibernate的sessionFactory的几种方法
- spring配置hibernate的sessionFactory的几种方法GOOD
- spring配置hibernate的sessionFactory的几种方法
- Spring创建Hibernate的SessionFactory的简易方法
- hibernate 的SessionFactory的实现
- Hibernate的sessionFactory的封装
- spring管理hibernate的SessionFactory-多种配置方法
- Hibernate SessionFactory中openSession和getCurrentSession方法的区别
- Hibernate、Hibernate4获取SessionFactory对象方法的变化
- OpenGL编程轻松入门之一个简单的例子
- Tomcat5.5(6.0)配置-多域名绑定和虚拟目录
- CURL常见问题
- MPEG2 TS的测量和分析
- 色阶的中间调调节原理之一
- 重建Hibernate的SessionFactory的方法(不重启服务)
- 用VB将目录里所有文件及子目录存储到一个类型数组中后,将基其反映在Treeview控件上
- ie toolbar开发经验总结
- It Rings a Bell 很耳熟
- Rational Rose 2003画图时“接口”图形的几个切换方式与效果
- 汉译英中需要注意的四个特殊问题
- 一拖二
- MPEG-2压缩编码技术原理应用
- 【转】[PowerShell教程][07]PowerShell中Write族cmdlet的介绍