JPA@Version:如何使用它?

2022-09-03 07:25:45
@Entity
public class Person {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;

    private int salary;

    @Version
    private long version;

    // ...getters and setters
}
  1. 是否需要为 创建 setter/getter?version
  2. 当使用Hibernate持久化此实体时,我不需要手动设置此值,对吧?
  3. 为了将乐观并发检查与Spring's一起使用,我还需要配置什么?是否支持所有数据库?hibernateTemplate.saveOrUpdate
  4. 如何对此实体进行单元测试?在我的数据库中,所有显示版本字段的记录都值为0
  5. 调用会不会每次都增加版本值?hibernateTemplate.saveOrUpdate

答案 1

我会说:

  1. set/get 版本是必需的,因为有时您可能会自己分配版本(从旧数据重新创建新实例时)
  2. 如果从数据库中读取实例,则不需要。(当你在代码中用new创建它时,这将是一个不同的故事)。
  3. 我什么也没看到。我从来没有遇到过数据库问题。
  4. 在我看来,单元测试不会进入数据库,因此涉及数据库的测试称为集成测试。你不应该有太多的它们,因为它们很慢,而且它们并没有真正测试你的代码,而是更多的Hibernate/Driver/Database代码......您应该信任它们,或者只是测试一次,但不要对所有实体进行测试。
    若要查看版本值大于 0,请在事务中读取/修改/更新实体,版本将增加 1。走出交易,再做一次,价值增加...
  5. 每次修改数据库行时,版本都会增加。

答案 2

推荐