我面临的实际问题是无论缓存的内容如何都能够强制进行 eclipselink 更新。目前,如果新更新与缓存中的值相同,则 eclipselink 不会创建新的更新语句。我不想使用刷新属性( <property name="eclipselink.query-results-cache" value="false"/>
)在 persistence.xml
.
我正在寻找一种解决方案,可以指定正在更新的实体不使用缓存中的值。
EntityManager em = getEntityManager();
EntityTransaction t = em.getTransaction();
t.begin();
Ticket ticket = get(ticketId);
if (ticket == null) {
return null;
}
ticket.setState(status);
em.persist(ticket);
t.commit();
如果我将上述更新( setState
方法)更改为 sql 查询,则查询对象可以选择执行 setHint,其中我们可以提及 setHint(QueryHints.CACHE_USAGE, CacheUsage.DoNotCheckCache)
。我也无法执行此操作,因为使用了很多此类更新。
在上面的代码片段中,更新是使用 setter 方法进行的,在这种情况下,我们如何指定忽略缓存的提示?或者还有其他方法可以使用 setter 对象进行强制更新吗?
最佳答案
对persist
的调用是不必要的。 persist 用于使 transient 实体持久化并受管理,并且您的实体已经持久化并受管理。
我真的没有看到将行的所有列设置为其当前值的更新的意义。但如果您确实想触发此类不必要的更新,请考虑添加一个虚拟 counter
持久字段并递增它。 EclipseLink 将检测其缓存值的更改,并触发更新。
关于java - eclipselink setter 更新提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8493842/