@Version @LastModifiedDate

时间:2018-04-19 14:09:47

标签: java spring hibernate jpa spring-data

人。 我正在考虑避免春季丢失更新的最简单方法。 在@Transactional方法中,我正在更新持久对象。为了避免丢失更新的可能性,@ LastModifiedDate和@Version注释应该用以下内容处理:

function evalCorrectAnswer(yourAnswer){
  console.log(yourAnswer)
  console.log(DB[0].correctAnswer)
  return DB[0].correctAnswer === yourAnswer ? `<p>Correct</p>` : `<p>Too bad</p>`;
}

我认为这是实现我需要的一种简短方法,但你知道这些的缺点吗?他们应该按预期工作吗?每一条信息都将非常感激。最诚挚的问候。

1 个答案:

答案 0 :(得分:1)

我认为没有任何缺点-对于Spring 5.1.5和Spring Data JPA 2.1.5,它可以按我的预期工作。我没发现有人抱怨。

编辑(10/07/2019)

我发现的唯一问题是,您使用Date类型的字段作为时间戳并将其存储为DATETIMEMySQL v5.6中(已在{{ 1}} v5.7)。 MySQL的精度降低到几秒钟,因此,如果您有两个事务在同一秒内运行,则版本将不会更新,并且Entity达到我无法再更新的状态。

TLDR-如果您打算将DATETIME@Version一起使用,请确保时间戳记的存储精度至少为毫秒,并且如果您更频繁地访问它,则可能会受到限制。