Hibernate学习笔记——SessionFactory.getCurrentSession()
来源:互联网 发布:js get post 区别 编辑:程序博客网 时间:2024/04/30 13:21
Hibernate Session获取方法大致有两种:
方法1. SessionFactory.openSession();
方法2. SessionFactory.getCurrentSession();
以前自己写代码都是用方法1取session。今天学会了方法2,以后就可以用它来提高效率了:
1.在xml或properties文件里设置current_session_context_class,例如:
2.然后就可以取Session了:
最后贴一段代码:
session1: AUTO
session2: AUTO
session1: ALWAYS
session2: ALWAYS
sessionOne equals sessionTwo? false
方法1. SessionFactory.openSession();
方法2. SessionFactory.getCurrentSession();
以前自己写代码都是用方法1取session。今天学会了方法2,以后就可以用它来提高效率了:
1.在xml或properties文件里设置current_session_context_class,例如:
hibernate.current_session_context_class=thread
这里用的是基于ThreadLocal的ThreadLocalSessionContext类。Hibernate还提供了其他的类,近期计划学习一下JTA。2.然后就可以取Session了:
Session sessionOne = factory.getCurrentSession();
之后当我对Session操作的时候抛出了"*** is not valid without active transaction"的异常,查资料才发现用方法2取得的Session必须和Transaction配套使用,即使只是进行search操作:sessionOne.beginTransaction();
//CRUD..
//CRUD..
最后贴一段代码:
@Test
public void testSession() throws Exception{
Session sessionOne = factory.getCurrentSession();
sessionOne.beginTransaction();//important.
System.out.println("session1: " + sessionOne.getFlushMode() );
Session sessionTwo = factory.getCurrentSession();
sessionTwo.beginTransaction();
System.out.println("session2: " + sessionTwo.getFlushMode() );
sessionOne.setFlushMode(FlushMode.ALWAYS);
System.out.println("session1: " + sessionOne.getFlushMode() );
System.out.println("session2: " + sessionTwo.getFlushMode() );
//notice!
System.out.println("sessionOne equals sessionTwo? " + (sessionOne.equals(sessionTwo)) );
//need not.
//sessionOne.close();
//sessionTwo.close();
//2009/02/09 更新
//在用getCurrentSession获得session的时候,如果transaction.commit()的话,session会自动被关闭。
//如果没有commit的话,还是需要手动关闭才行!
}
Print out:public void testSession() throws Exception{
Session sessionOne = factory.getCurrentSession();
sessionOne.beginTransaction();//important.
System.out.println("session1: " + sessionOne.getFlushMode() );
Session sessionTwo = factory.getCurrentSession();
sessionTwo.beginTransaction();
System.out.println("session2: " + sessionTwo.getFlushMode() );
sessionOne.setFlushMode(FlushMode.ALWAYS);
System.out.println("session1: " + sessionOne.getFlushMode() );
System.out.println("session2: " + sessionTwo.getFlushMode() );
//notice!
System.out.println("sessionOne equals sessionTwo? " + (sessionOne.equals(sessionTwo)) );
//need not.
//sessionOne.close();
//sessionTwo.close();
//2009/02/09 更新
//在用getCurrentSession获得session的时候,如果transaction.commit()的话,session会自动被关闭。
//如果没有commit的话,还是需要手动关闭才行!
}
session1: AUTO
session2: AUTO
session1: ALWAYS
session2: ALWAYS
sessionOne equals sessionTwo? false
- Hibernate学习笔记——SessionFactory.getCurrentSession()
- 【转】Hibernate SessionFactory().getCurrentSession()猫腻
- 新Hibernate SessionFactory().getCurrentSession()猫腻
- 新Hibernate SessionFactory().getCurrentSession()猫腻
- Hibernate学习笔记——SessionFactory和Session
- Hibernate SessionFactory openSession vs getCurrentSession vs openStatelessSession
- hibernate中的SessionFactory的openSession与getCurrentSession
- SessionFactory.getCurrentSession()
- Hibernate学习笔记 之 configuration、sessionFactory、session
- Hibernate二级缓存——SessionFactory
- 学习Hibernate源码——配置文件解析,SessionFactory创建
- 学习Hibernate源码——配置文件解析,SessionFactory创建
- Hibernate学习笔记2:openSession和getCurrentSession比较
- hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别
- Hibernate里sessionFactory的openSession()和getCurrentSession()的区别
- Hibernate SessionFactory中openSession和getCurrentSession方法的区别
- (hibernate之一)Sessionfactory的getCurrentSession与openSession的区别
- hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别
- 深入研究java.lang.Class类(转)
- SQL Server数据导入导出工具BCP详解
- 认识java.lang.Class类
- SessionFactory.getCurrentSession与openSession的区别
- ADF运行过程中java内存偏小
- Hibernate学习笔记——SessionFactory.getCurrentSession()
- MySQL中的mysqldump命令使用详解
- Linux下的tar命令
- CRM与SCM整合
- SQL Server 2005 - 实作CLR存储过程
- Hibernate中各种保存方法的区别(转载)
- OpenRowSet和OpenDataSource的运用技巧
- 实验用机多系统安装流程
- 系统托盘技巧