一、session
session可以理解为操作数据库的对象
session的特点:线程不安全
1、把对象保存在关系型数据库中需要调用session的各种方法:
如:save() 、update()、delete()、createQuery()等
2、如何获得session对象?
- openSession
- getCurrentSession
使用getCurrentSession需要在hibernate.cfg.xml文件中进行配置:
如果是本地事物(jdbc事物)
<property name="hibernate.current_session_context_class">thread</property>
如果是全局事物(jta事物)
<property name="hibernate.current_session_context_class">jta</property>
3、openSession和getCurrentSession的区别:
- getCurrentSession在事物提交或者回滚之后会自动关闭,而openSession需要手动关闭。如果使用openSession而没有手动关闭,多次之后会导致连接池溢出。
- openSession每次创建新的session对象,getCurrentSession使用现有的session对象。
二、transaction
Hibernate对数据的操作都是封装在事物中,并且默认是非自动提交的方式。所以用session保存对象时,如果不开启事物和提交事物,对象并不会真正保存在数据库里。
网友评论