我想了解使用EclipseLink作为持久性提供程序的JPA 2中的缓存。我不知道我的想法是否正确。
例如:
我使用JTA交易。在一个名为A
的实体类中,我声明了@Cacheable(true)
注释。我从EJB bean调用一个更新A.class
对象的方法。在第一次我调用em.find(A.class, 1)
。我的问题是搜索顺序是什么。我提出了自己的思维方式。
EntityManager
搜索L2缓存中的实体。如果EM
找到对象,它会将对象复制到L1缓存并停止搜索。EntityManager
搜索L1缓存中的实体。如果EM
找到该对象,则会停止搜索。EntityManager
搜索数据库中的实体。如果EM
找到对象,它会将对象放入L1缓存并停止搜索。当我找到对象时,我修改了几个字段,我想调用em.merge(aClassRepresentant)
。我认为当事务停止EntityManager
时,将aClassRepresentant
合并到L2缓存并自行销毁。我是否认为正确?