JPA缓存

JPA 2.0类似Hibernate,也分一级缓存和二级缓存。 JPA 1.0不支持二级缓存。

JPA 2.0 规范提供一个基本缓存操作API,可以在EntityManagerFactory中使用:

如果二级缓存激活,实体将不在一级缓存persistence context中获得,而是从L2二级缓存中获得:

二级缓存是跨事务场景的,是真正意义上的全局应用缓存。一级缓存persistence context是属于请求范围级别的缓存。

当二级缓存有效时,你就不能依靠事务来保护并发数据的,而是依靠锁策略:

1.在确认修改后,需要手工处理乐观锁失败
2.配置失效期,以及刷新策略,最小化使用锁策略

L2缓存和具体JPA实现有些关系,EclipseLink缓存整个实体, Hibernate缓存实体id和状态,下面是Hibernate的二级缓存实现:

原文:
JPA Caching
[该贴被banq于2009-08-26 17:14修改过]