Hibernate和Jpa中都有持久化上下文

Hibernate和Jpa中都有持久化上下文的概念(Persistence context),持久化上下文其实就是Hibernate和JPA的一级缓存,通过在持久化上下文中存储持久化状态实体的快照,既可以进行脏检测,并且持久化上下文还可以当做持久化实体的缓存。虽然Hibernate作为JPA的超集,Hibernate3.2之后实现了JPA,但是两者对持久化上下文的管理有一定的同,下面比较如下:



1.Hibernate是将Persistence context绑定到session中,当session关闭的时候,persistence context也就关闭了。而对于session来说,Hibernate又可以根据具体情况分别绑定到Thread和JTA事务。如果 Hibernate采用JDBC事务的话,那么采用ThreadLocal来实现Thread绑定,如果采用JTA事务的话,则可以将session绑定到JTA事务上。



2.JPA里持久化上下文分为两种情况:



(1)如果采用application-managed,那么应用程序来管理所需资源(比如数据库等),此时持久化上下文是绑定到当前session的,也就是绑定到EntityManager.

(2)如果采用容器管理的话,那么持久化上下文又分为两种:



1)事务范围的持久化上下文。对于事务的持久化上下文来说,每次当stateless bean与EJB object绑定的时候,容器会注入EntityManger,这样EntityManager和事务都是容器管理的。每次方法调用默认启动事务,方法调用结束后,结束事务。当事务结束的时候,与当前EntityManager关联的持久化上下文也就随之关闭。此种情况下不需要手动关 EntityManager。因为容器会在事务提交或者回滚后,自动关闭EntityManager.



2)扩展的持久化上下文,扩展的持久化上下文是针对与statefull bean来说的,此时持久化上下文的生命周期和statefull bean的生命周期是一致的。每次方法调用结束后,EntityManager关闭了,但是持久化上下文没有关闭,这样以来当事务结束的时候持久化上下文中的对象仍然处于持久化状态,所以在跨方法调用时候,就不需要merge操作了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值