JPA @Version:如何使用它?

com*_*tta 15 java spring dao hibernate jpa

@Entity
public class Person {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;

    private int salary;

    @Version
    private long version;

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

KLE*_*KLE 13

我会说:

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