当我使用EclipseLink JPA query.getResultList()时,它不会将结果存储在缓存中,因此当我调用merge时,第一个调用会对每个对象执行select all然后更新。
在缓存中获取查询结果的正确方法是什么?
我在想查询然后为每个结果调用EntityManager find - 但似乎错了。显然我不能先调用find,因为我不知道对象id。
基本上我想将所有数据缓存在内存中(在缓存中)并尽可能快地进行更新。
由于
答案 0 :(得分:0)
默认情况下,EclipseLink会缓存getResultList()在共享(L2)缓存中返回的每个对象。
如果您没有获得缓存,那么您的配置错误。
请包含您的代码,配置和SQL日志。
你在使用Spring吗? (见http://www.eclipse.org/forums/index.php/t/200321/)
确保您尚未禁用共享缓存或已配置刷新。
您正在阅读多少个对象,以及从查询到合并的时间有多长?如果要读取大量对象,则可能需要增加缓存大小(默认值为100),或更改缓存类型。
请参阅http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Caching