论坛首页 Java版

JPA没有对缓存的规范?

浏览 893 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2007-11-23 关键字: JPA
发现JPA API提供的annonation里面没有关于cache的部分,依赖于Hibernate等实现者各自的实现,这样岂不是JPA程序依赖于实现了么?hibernate与openjpa实现的切换还需要修改java代码了??
   
时间:2008-01-18
最近我也一直在想这个问题。目前支持缓存最好的是Hibernate。toplink和openJPA没用过,不清楚他们是否支持缓存。不过JPA规范里没有写的话,缓存估计只能是具体实现的可选项,需要单独配置。
现在主要是看缓存配置写在哪里。Hibernate的缓存用注释的方式写在类里的话,如果OpenJPA只是不理这部分注释的话,我估计应该不用更改代码。不过性能就下来了。
   
0 请登录后投票
时间:2008-01-18
刚才去OpenJPA网站看了看。发现OpenJPA也是支持二级缓存的。不过好像他是自己的实现。OpenJPA只给出了第三方缓存和OpenJPA整合需要的接口。但是没有在文档中明确支持那些缓存。
我又看了一下类中缓存的注释方法,不同产品确实是不同的。所以,如果要在不同的产品中使用缓存的话,注释必须修改。不能直接使用。
   
0 请登录后投票
时间:2008-05-25
所以我一直怀疑jpa的性能,害怕使用框架的某些原因是害怕管理缓存,如果使用框架的效率不高的话我到不如直接jdbc+cache!
   
0 请登录后投票
时间:2008-05-25
JPA支持缓存
   
0 请登录后投票
时间:2008-05-25
可以看看springside
   
0 请登录后投票
时间:2008-05-25
xzs 写道
所以我一直怀疑jpa的性能,害怕使用框架的某些原因是害怕管理缓存,如果使用框架的效率不高的话我到不如直接jdbc+cache!

jpa只是一个规范而已,具体的性能得看框架的实现方法
   
0 请登录后投票
时间:2008-05-26
Hiberante/TopLink/OpenJPA都默认打开了二级缓存,
Hiberante的二级缓存使用情况:
Cache provider: org.hibernate.cache.HashtableCacheProvider
Second-level cache: enabled
Query cache: disabled
Structured second-level cache entries: disabled

三种产品都使用过,最稳定的要算TopLink,最差的是OpenJPA,TopLink的二级缓存比Hibernate好,但Hibernate可以通过更换缓存实现来获得同样效果.

目前在项目中通常使用TopLink
   
0 请登录后投票
时间:2008-05-26
魔力猫咪 写道
刚才去OpenJPA网站看了看。发现OpenJPA也是支持二级缓存的。不过好像他是自己的实现。OpenJPA只给出了第三方缓存和OpenJPA整合需要的接口。但是没有在文档中明确支持那些缓存。
我又看了一下类中缓存的注释方法,不同产品确实是不同的。所以,如果要在不同的产品中使用缓存的话,注释必须修改。不能直接使用。


所以Java Cache API需要一个规范去统一,如果有一个类似commons-logging的东西,JPA去依赖这个Common API就合理了。不过JSR107貌似没有下文...

另外Hibernate的二级缓存配置可以写在hibernate.cfg.xml里,这样倒是可以做到java code对hibernate的零依赖。不过在各个JPA实现基本都有二级缓存概念的情况下,JPA为什么不再多走一步,规范一套Cache Annotation,不知道是基于什么考虑。

题外话,用了一段JPA发现JPA规范的还只是一部分很基础的映射情况,远不如Hibernate考虑得全面,所以还是用回Hibernate了,利用JPA从代码中剥离Hibernate还是有距离的。
   
0 请登录后投票
论坛首页 Java版

跳转论坛:
JavaEye推荐