首页 > 解决方案 > 如果在 json 中删除,则使用带有 spring 的 @version 不起作用

问题描述

我们有一个 DTO

@Getter
@Setter
@NoArgsConstructor
@Table(name = "agenda")
@Entity
@EqualsAndHashCode(of = "id")
public class Agenda implements Serializable {

  private static final long serialVersionUID = -4588716014801416553L;

  @Id
  private String id;

  @Version
  private Long version = 1L;

  @Column(name = "nombre")
  private String name;

  @JsonIgnore
  @OneToMany(mappedBy = "agenda", targetEntity = Timetable.class)
  private Set<Timetable> timetables;

}

在这个 dto 中,我们添加了 javax.persistence 的 @version,如果我们向控制器发送带有字段版本的 json,则运行良好,否则在尝试保存到数据库时会失败。

例如,如果我们发送:

"agenda": {
  "name": "Agenda 1",
   "id": "agenda1",
   "version": 1
},

工作没有任何问题,但是如果我们删除版本会引发异常,所以我的问题是,版本字段是否总是强制性的?

错误是:无法执行语句;SQL [不适用];约束 [horario_id]; 嵌套异常是 org.hibernate.exception.ConstraintViolationException: could not execute statement",

先感谢您。

标签: springhibernatespring-data

解决方案


问题是我们使用了错误的导入,我们必须使用

import org.springframework.data.annotation.Version;

代替

import javax.persistence.Version;

推荐阅读