我有一个对象 GeneralKnowledgeTest,它包含很多统计字段(ratingsCount、responsesCount、ratingStars ...),每次用户进行该测试时都会更新这些字段(takeTest() -> 事务方法)。
可能会发生许多用户在同一时间进行相同的测试,所以我正在考虑实现一个乐观锁定(@version)和一个拦截器,在抛出乐观锁定异常的情况下重试 takeTest 方法。
所以,在 takeTest 方法中,我总是得到一个新的 GeneralKnowledgeTest 实例,例如entityManager.find(testId),然后更新它的统计字段。如果抛出乐观异常,拦截器将简单地重试 takeTest 方法,直到它成功。
您对此程序有何看法。对于可能有很多用户尝试进行相同测试的系统,这是实现乐观锁定的好方法吗?
PS。如果抛出乐观锁异常,业务不会承认显示任何警告消息,所以拦截器是必须的,以允许顺利执行......