Hibernate的事务模式与反模式

来源:互联网 发布:linux 查看java进程号 编辑:程序博客网 时间:2024/06/01 07:14
Hibernate的事务模式及反模式
1. Session-per-request,模式,一个Session对象对应一个数据库事务,适用于Web应用。
Session对象可能被其他组件通过SessionFactory.getCurrentSession()方法方法引用,为了保证Session对象在被引用时有效,Session对象必须拥有一定的有效范围,这个有效范围就是通过org.hibernate.context.spi.CurrentSessionContext接口实现的:
  • jta范围,在JTA事务中,当第一次调用SessionFactory.getCurrentSession()方法时创建Session对象
  • managed范围,第三方组件(如javax.servlet.Filter实现、AOP拦截器、Spring容器等)
2. Session-per-operation,反模式,一个Session对象对应一次的数据库调用。
3. Session-per-conversation,反模式,一个Session对象对应一系列的数据库请求
4. Session-per-request-with-detached-objects,反模式,实现类似Session-per-conversation的功能
5. Session-per-application,反模式,一个Session对象对应整个应用
  • 存在多线程之间的竞争条件问题
  • 数据库事务的异常将导致Session对象关闭,也就意味着应用的停止
  • Session缓存中要维护应用中的所有持久化对象,内存消耗大
1 0
原创粉丝点击