小编典典

JPA @Version:如何使用?

hibernate

@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的服务器上使用乐观并发检查,我还需要配置hibernateTemplate.saveOrUpdate什么?是否支持所有数据库?
  4. 如何对该实体进行单元测试?在我的数据库中,所有显示版本字段的记录的值为0
  5. hibernateTemplate.saveOrUpdate每次调用都会增加版本值吗?

阅读 632

收藏
2020-06-20

共1个答案

小编典典

我会说:

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

  5. 每次修改数据库行时,版本都会增加。

2020-06-20