OpenJpa的cache机制要比其他的ORM框架自带的cache要强大的多,其他的ORM框架如hibernate自带的cache是session 级别的,如果你想实现跨session的cache就必须集成third party的cache(Ehcache,oscache),但openjpa的cache是能够跨session的,对应jpa的标准来说就是跨entityManager是EntityManagerFactory level的,而且openjpa的cache还能够support multi-JVM,也就是能够在分布式的环境中使用。
openJpa的cache分为两种,一种是DataCache用来cache Entity.
使用时需要加入以下配置文件到persistence.xml中的<properties>下
<property name="openjpa.DataCache" value="true(CacheSize=5000, SoftReferenceSize=0)"/>
<property name="openjpa.RemoteCommitProvider" value="sjvm"/>
其中cachesize很清楚就是指所能cache的entity的最大数目,这里需要注意的是SoftReferenceSize这个属性,SofeReference是指openjpa的cache如果达到最大存储数目,或根据一定的算法需要从cache中移出一下数据时,会把它们放到一个softReferenceMap中(注softReferenceMap中的数据也会删除只是这些数据比直接删除会待的时间久一些,以防止在cache删除他们以后你马上就访问他们),这样下次访问到这个移出的数据时就会到softReferenceMap 中去找,这样比直接删除了,重新访问DB查找的效率好一点。这点跟其他的cache实现有点不一样,其它的cache是直接从cache中删除这些数据。如果你不想使用sofeReferenceMap,就把它的值设成0.
此外,你还可以设置cache在某个特定的时间timeout 通过设置EvictionSchedule 这个属性比如(EvictionSchedule='15,45 15 * * 1')表示的意思是让cache在星期天的下午三点15分到45分之间清除cache.
你还可以给某个entity设定timeout的时间通过@DataCache(timeout=1000000)
关于第二个属性openjpa.RemoteCommitProvider主要在分布式环境中使用cache时要配置,来保持在分布式环境中各个jvm中cache数据的同步
@Entity
@DataCache(timeout=1000000)
public class Magazine {
@Id private String isbn;
@Id private String title;
@Column(name="PRICE")
private BigDecimal price;
@Column(name="SOLDCOPY")
private int copySold;
@Column(name="VERS")
private int version;
@Column(name="DELETE_FLG")
private String deleteFlag;
第二种cache是querycache,openjpa默认在你enable datacache后,自动帮你enable query cache. querycache主要用来cache query返回的结果
<property name="openjpa.QueryCache" value="CacheSize=1000, SoftReferenceSize=100"/>
此外openjpa还提供可供我们extend cache 的API
分享到:
相关推荐
除了对 JPA 标准的支持之外,OpenJPA 还提供了非常多的特性和工具支持让企业应用开发变得更加简单,减少开发者的工作量,包括允许数据远程传输/离线处理、数据库/对象视图统一工具、使用缓存(Cache)提升企业应用...
3. **缓存管理**:OpenJPA支持一级缓存(Entity Cache)和二级缓存,提高数据访问效率,减少对数据库的直接访问。 4. **事务管理**:集成JTA(Java Transaction API),支持分布式事务处理,确保数据的一致性和完整...
<property name="openjpa.QueryCache" value="CacheSize=1000,SoftReferenceSize=100"/> <property name="openjpa.jdbc.DBDictionary" value="oracle"/> <property name="openjpa.ConnectionUserName" value=...
通过以上对 OpenJPA 2.0 文档的部分内容的解读,我们了解了 OpenJPA 2.0 的核心特性和使用方法。它不仅遵循 JPA 规范,还提供了丰富的扩展功能,使得开发者能够更加灵活地实现数据访问逻辑。无论是对于初学者还是...
这部分内容介绍了如何将Ehcache与OpenJPA结合起来使用。 #### 四十、Grails缓存(Grails Caching) Grails是基于Groovy语言的一个Web框架。这部分内容介绍了如何在Grails应用程序中使用Ehcache。 #### 四十一、...
8. **EclipseLink或OpenJPA**:如果项目同时使用了JPA和其他非Hibernate的ORM实现,可能需要这些库来进行兼容或切换。 9. **Guava**:在某些版本的Hibernate中,Guava库被用作辅助工具集,提供了一些实用的集合和...
1. **集成示例**:提供了 OpenJPA 与 Ehcache 集成的具体示例。 2. **性能优化**:如何通过 Ehcache 提升 OpenJPA 的性能。 #### 三十九、Grails 缓存(Grails Caching) 1. **集成示例**:提供了 Grails 与 ...
实体类使用了JPA注解,如`@Entity`表示这是一个实体类,`@Id`和`@GeneratedValue`用于指定主键。 接着,编写一个SessionFactory工厂类,用于创建SessionFactory实例: ```java import org.hibernate.SessionFactory...
- JPA(Java Persistence API):Java标准的持久化框架,包括Toplink,OpenJPA和EJB3实体Bean。 3. **应用程序框架**: - Spring:核心包括AOP(面向切面编程)和IOC(依赖注入),广泛应用于各种场景。 - Seam...
Open EntityManager in View 29.4. Using H2’s Web Console 29.4.1. Changing the H2 Console’s Path 29.5. Using jOOQ 29.5.1. Code Generation 29.5.2. Using DSLContext 29.5.3. jOOQ SQL Dialect 29.5.4. ...