Google app engine google app engine java数据存储是否缓存JPA查询结果?

Google app engine google app engine java数据存储是否缓存JPA查询结果?,google-app-engine,jpa,google-cloud-datastore,jpa-2.0,datanucleus,Google App Engine,Jpa,Google Cloud Datastore,Jpa 2.0,Datanucleus,我使用的是DN3和GAE 1.7.4。 我使用JPA2,根据文档,它默认启用了Level2缓存 我的问题是: 如果我运行一个返回一些对象的查询,这些对象是否会根据其ID自动放入缓存 如果我用一个对象的id运行em.find(),该对象已经加载了另一个查询createQuery().getResultList(),它在缓存中是否可用 我是否需要在事务中运行我的em.find()或查询才能启动缓存 我需要澄清一下这个缓存是如何工作的,以及如何进行查询/查找/持久化,以便充分利用缓存 谢谢 默认情况下

我使用的是DN3和GAE 1.7.4。 我使用JPA2,根据文档,它默认启用了Level2缓存

我的问题是:

如果我运行一个返回一些对象的查询,这些对象是否会根据其ID自动放入缓存

如果我用一个对象的id运行
em.find()
,该对象已经加载了另一个查询
createQuery().getResultList()
,它在缓存中是否可用

我是否需要在事务中运行我的
em.find()
或查询才能启动缓存

我需要澄清一下这个缓存是如何工作的,以及如何进行查询/查找/持久化,以便充分利用缓存

谢谢

默认情况下启用了2级缓存。获取上一个默认值 行为,设置持久性属性datanucleus.cache.level2.type 没有。(或者将datanucleus缓存插件包括在 类路径,并设置持久性属性 将datanucleus.cache.level2.type改为javax.cache以将Memcache用于二级缓存 缓存

至于您的疑问,这取决于您的查询以及DataNucleus和GAE数据存储适配器的实现细节。因为我相信,找到问题答案的最佳途径是使用JPA2接口…更具体地说是方法

运行查询,通过
EntityManagerFactory
访问
Cache
界面,查看二级缓存
是否包含所需的实体


启用日志还将为您提供有关幕后发生的事情的良好提示。

在开发本地GAE模式下调试后,我认为二级缓存可以工作。无需事务开始/提交。我对主键以及em.find()的简单查询结果将通过主键放入缓存中

但是,本地开发服务器中的默认缓存超时时间为几秒钟,我必须添加以下内容:

    <property name="datanucleus.cache.level2.timeout" value="3600000" />

到persistence.xml