保存另一个不相关的对象时,对象的版本号会神秘地增加

时间:2017-08-27 23:40:27

标签: spring hibernate jpa

我的Web应用程序使用Spring(4.2.9),Spring Data(3.2.5),JPA,Hibernate(4.3.8)和MS SQL Server(2014)。我希望能够展现全局并找到解决这个问题的方法。

这是受影响的类:

Class Affected {
    @Id
    @GeneratedValue( strategy = GenerationType.IDENTITY )
    private Long id;

    @Version
    private Long version = 1L;

    //getters and setters of the above two fields.
}

这是另一个类并保存其对象导致Affected类的版本增加。 Pleaese注意到两个班级之间没有任何关系。

Class Reason {
    @Id
    @GeneratedValue( strategy = GenerationType.IDENTITY )
    private Long id;
}

获取受影响对象的对象的服务方法:

@Override
@Transactional(readOnly = true)
public Survey getAffectedById(Long id) {
    return affectedRepository.findOne(id);
}

这是Web控制器方法中的流程:

  1. 加载受影响的对象
  2. 在事务中创建并保存Reason对象。在此步骤中,IP地址从javax.servlet.http.HttpServletRequest中提取并保存在数据库中,以记录访问Web应用程序的IP地址。
  3. 在这两个步骤之后,加载的受影响对象的版本号增加1.如果我删除第二步,则受影响的版本号没有变化。

    我无法弄清楚这种增加的原因。我知道更多的代码或细节是有帮助的,但我不想在这里过度使用这些人,实际的代码也比这复杂得多。我希望能够找到解决这个问题的方向。

0 个答案:

没有答案