Java 使用带有乐观锁定的JPA更新n个记录

Java 使用带有乐观锁定的JPA更新n个记录,java,mysql,jpa,jdbc,ejb-3.0,Java,Mysql,Jpa,Jdbc,Ejb 3.0,我有一个名为“count”的列的表,我想运行一个cron作业,该作业将触发一个语句,该语句执行如下SQL: update summaryTable set count=4; 请注意,触发此cron作业时,可能会有并发线程读取并更改“count”的值。该表有一个版本列来支持乐观锁定 在JPA中更新计数的有效方法是什么?使用JPA,如果您有该表的实体,也可以使用JPQL执行更新。您可以使用该函数执行此操作 类似于:updatesummaryTableEntity-SET-ent.count=4 因

我有一个名为“count”的列的表,我想运行一个cron作业,该作业将触发一个语句,该语句执行如下SQL:

update summaryTable set count=4;
请注意,触发此cron作业时,可能会有并发线程读取并更改“count”的值。该表有一个版本列来支持乐观锁定


在JPA中更新计数的有效方法是什么?

使用JPA,如果您有该表的实体,也可以使用JPQL执行更新。您可以使用该函数执行此操作

类似于:updatesummaryTableEntity-SET-ent.count=4


因为如果您的cron计划足够简单,那么它也被标记为EJB3,那么您可以设置一个EJB计时器来运行执行更新的方法。这样,您就可以在容器中管理所有定时任务,而不必担心外部并发性。

您想要的乐观锁定行为是什么?如果别人换了一排,你希望你的工作失败吗?如果您在其他人工作时更改行,您希望您的工作导致其他人的事务失败?或者您希望您的工作不会导致乐观锁定错误?有人认为这不是第一次,因为将行设置为任意值的作业可能不会通过尊重其他人的乐观锁定来证明什么。读者确实需要对上述评论的反馈来回答这个问题。您是否也可以提及您的JPA提供商(可能有特定于提供商的解决方案)?我希望其他一些变异操作失败,因为我的作业是批量更新。我正在使用eclipselink。