【问题标题】:could not execute statement; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement无法执行语句;嵌套异常是 org.hibernate.exception.ConstraintViolationException:无法执行语句
【发布时间】:2019-11-28 02:51:10
【问题描述】:

我尝试通过发布 JSON 来插入一些数据,但我不知道为什么,它返回一个错误,提示字段 'id_accessoire' 不能为空(null)。

当我使用 Advanced Rest Client 发送 JSON 时,字段 id_accessoire 不为空。

首先,这是我的实体(文件 Affaire.java),所有字段都在我的数据库中:

@Entity
@Data
@Table(name = "affaire")
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
public class Affaire implements Serializable {
  private static final long serialVersionUID = 1L;

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "id", insertable = false, nullable = false)
  private Integer id;

  @Column(name = "sn", nullable = false)
  private String sn;

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

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

  @Column(name = "etat", nullable = false)
  private Boolean etat;

  @Column(name = "finEval", nullable = false)
  private Date finEval;

  @Column(name = "finRep", nullable = false)
  private Date finRep;

  @Column(name = "limiteCalendaire", nullable = false)
  private String limiteCalendaire;

  @Column(name = "date_lancement", nullable = false)
  private Date dateLancement;

  @Column(name = "accordClient", nullable = false)
  private boolean accordClient;

  @Column(name="idAccessoire", insertable = false, updatable = false)
  private Integer idAccessoire;

  @Column(name="idFlux", insertable = false, nullable = false, updatable = false)
  private Integer idFlux;

  @Column(name="idReparation", insertable = false, nullable = false, updatable = false)
  private Integer idReparation;

  @Column(name="idVariante", insertable = false, nullable = false, updatable = false)
  private Integer idVariante;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name="idAccessoire", nullable = false)
  @JsonBackReference(value = "affaireAccess")
  private Accessoire accessoire;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name="idFlux", nullable = false)
  @JsonBackReference(value = "affaireFlux")
  private Flux flux;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name="idReparation", nullable = false)
  @JsonBackReference(value = "affaireRep")
  private Reparation reparation;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name="idVariante", nullable = false)
  @JsonBackReference(value = "affaireVariante")
  private Variante variante;

  @OneToMany(mappedBy = "affaire", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
  //@JsonManagedReference(value = "affecterAffaire")
  @ToString.Exclude
  private List<Affecter> affecters;

}

最后,这是我尝试发布的 JSON,但它不起作用:

{
  "sn":"4444AAA",
  "zc":null,
  "certificat":null,
  "etat" : false,
  "finEval": "2019-08-25",
  "finRep": "2019-09-14",
  "limiteCalendaire":"10R28",
  "dateLancement":"2019-07-19",
  "accordClient" : false,
  "idAccessoire" : 1,
  "idFlux": 1,
  "idReparation": 2,
  "idVariante" : 7,
}

错误是字段“id_accessoire_不能为空(null)

【问题讨论】:

    标签: json spring spring-boot jpa jackson


    【解决方案1】:

    从您的实体类中,我可以看到不可插入不可更新的 idAccessoire 列。

     @Column(name="idAccessoire", insertable = false, updatable = false)
      private Integer idAccessoire;
    

    这意味着无论您在代码中设置哪个值,它都会被忽略。

    现在,如果 idAccessoire 在您的表配置中被定义为不可为空的字段,则会引发此错误。

    1) 您真的希望该字段不可插入或不可更新吗?
    2) 如果您必须在数据库中将此列指定为非 null,请尝试指定默认值,前提是它适合您的业务逻辑。

    【讨论】:

      猜你喜欢
      • 2018-07-07
      • 2016-03-28
      • 2019-06-06
      • 1970-01-01
      • 2022-11-09
      • 1970-01-01
      • 2013-09-15
      • 2019-11-15
      相关资源
      最近更新 更多