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