这两者的差别网上非常多资源,我这里就copy一下了,然后有点问题的是今天遇到的问题。

  openSession和getCurrentSession的根本差别在于有没有绑定当前线程,所以,用法有差异:

* openSession没有绑定当前线程,所以,使用完后必须关闭。

* currentSession和当前线程绑定,在事务结束后会自己主动关闭。


  今天在复习Hibernate时,看到Hibernate检索方式的时候。写了一个小样例:

@Test
public void query01() {
SessionFactory sessionFactory = new Configuration().configure()
.buildSessionFactory();
Session session = sessionFactory.getCurrentSession();
/*
* 使用getCurrentSession()必须开启事物。否则抛出异常org.hibernate.HibernateException:
* createQuery is not valid without active transaction
*/
session.beginTransaction();
Query query = session.createQuery("from Employee");
System.out.println(query.list());
}

  hibernate.cfg.xml中配置了

<property name="current_session_context_class">thread</property>

  这里已经写了凝视。我遇到的问题就是这个,在进行查询的时候使用getCurrentSession居然抛出 createQuery is not valid without active transaction的异常,认为非常奇怪。

  依照文档说:getCurrentSession()方法获取Session的机制应该是

“在getCurrentSession() 被调用的时候,实际被运行的方法是CurrentSessionContext.currentSession() 。在currentSession() 运行时。假设当前 Session为空。currentSession会调用 SessionFactory 的 openSession。

  如今的状态是符合Session为空的情况,那么就应该通过openSession()方法产生一个Session。可是却抛出了异常。

  Google了一下,找到一篇博文:http://liusu.iteye.com/blog/380397

  里面介绍了关于这个问题,英文有点水,理解就看自己了。

  我的感觉就是出现这样的情况感觉openSession相对来说还好用一些了。

    @Test
public void query02() {
SessionFactory sessionFactory = new Configuration().configure()
.buildSessionFactory();
Session session = sessionFactory.openSession();;
try {
Query query = session.createQuery("from Employee");
System.out.println(query.list());
} catch (HibernateException e) {
e.printStackTrace();
}finally{
session.close();
}
}

  可能比較片面。可是眼下还没有到那个层面,慢慢来,就像之前看这两个的差别一样。一直看不懂。慢慢的积累到一定层度就会非常好理解了。

最新文章

  1. OFFSET约束(OFFSET IN 和OFFSET OUT)
  2. Splay伸展树学习笔记
  3. [Mongo] How to Install Mongo on Debian(不要安装)
  4. MyBatis java and MySql local variables
  5. php框架学习的步骤
  6. win7启动出现蓝屏STOP: 0X0000007B
  7. mac 安装PIL
  8. Java 获取今天之前的七天 的日期
  9. iter, yield与enumerate的实现
  10. iOS开发——判断是否第一次启动
  11. iOS 界面 之 EALayout 无需反复编译,可视化实时界面,告别Storyboard AutoLayout Xib等等烦人的工具
  12. 读书笔记--C陷阱与缺陷(一)
  13. oo修仙之路
  14. oracle 老用户数据导入新建用户
  15. SQL注入(dvwa环境)
  16. react添加方法的两种形式
  17. MySQL数据库之视图
  18. rgba和opacity区别
  19. 《The Mythical Man-Month(人月神话)》读后感(2)
  20. (转)Java调用SQL Server的存储过程详解

热门文章

  1. c# 获取本周开始时间与结束时间
  2. 46.Qt 使用OpenGL绘制立方体
  3. B - Even Odds
  4. unity3d 让物体移动到点击位置
  5. [转]C++内存管理
  6. QT4.8界面设计(MSVC2010X)
  7. 初步学习Axure---整理了一下自己两周的学习成果:动态面板
  8. Multitier architecture-n-tier architecture
  9. Linux 中文件名颜色所代表的属性
  10. bzoj 1207 [HNOI2004]打鼹鼠 小技巧