错误 ExceptionMapperStandardImpl 在 sql 中与 Hibernate 保持一致

ERROR ExceptionMapperStandardImpl Persisting in sql with Hibernate

努力坚持Fiscalizacaoclass:

@Id
@Column(name = "self_id", columnDefinition = "number")
private Long selfId;
@Null
@Column(columnDefinition = "varchar2(2000 byte)")
private String relatorio;
@NotNull
@ManyToOne(cascade = { CascadeType.DETACH, CascadeType.PERSIST, CascadeType.REFRESH,
        CascadeType.REMOVE }, fetch = FetchType.LAZY)
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
@JoinColumn(name = "tipo_grau_aproveitamento_id", columnDefinition = "number")
private TipoGrauAproveitamento tipoGrauAproveitamento;
@NotNull
@ManyToOne(cascade = { CascadeType.DETACH, CascadeType.PERSIST, CascadeType.REFRESH,
        CascadeType.REMOVE }, fetch = FetchType.LAZY)
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
@JoinColumn(name = "tipo_medida_id", columnDefinition = "number")
private TipoMedida tipoMedida;
@Null
@ManyToOne(cascade = { CascadeType.DETACH, CascadeType.PERSIST, CascadeType.REFRESH,
        CascadeType.REMOVE }, fetch = FetchType.LAZY)
@JsonIgnore
@JsonProperty(access = Access.READ_ONLY)
@JoinColumns({ @JoinColumn(name = "plano_id", referencedColumnName = "self_id"),
        @JoinColumn(name = "processo_id", referencedColumnName = "processo_id") })
private PlanoFiscalizacaoProcesso plano;
@Null
@ManyToOne(cascade = { CascadeType.DETACH, CascadeType.PERSIST, CascadeType.REFRESH,
        CascadeType.REMOVE }, fetch = FetchType.LAZY)
@JsonIgnore
@JoinColumn(name = "reparticao_id", columnDefinition = "number")
@NotFound(action = NotFoundAction.IGNORE)
private Reparticao reparticao;
@Null
@Column(name = "data_fiscalizacao", columnDefinition = "date")
private Date dataFiscalizacao;
@ManyToOne(cascade = { CascadeType.DETACH, CascadeType.PERSIST, CascadeType.REFRESH,
        CascadeType.REMOVE }, fetch = FetchType.LAZY)
@JsonIgnore
@JoinColumn(name = "status_sync", referencedColumnName = "status", columnDefinition = "varchar2(1 byte)")
private SyncStatus status_sync;
@Null
@Column(name = "version_date", columnDefinition = "date")
private Date versionDate;

我收到以下错误:

[Validation failed for classes [mz.co.sigit.teste.fiscalizacao.plano.processo.fiscalizacao.Fiscalizacao] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='must be null', propertyPath=plano, rootBeanClass=class mz.co.sigit.teste.fiscalizacao.plano.processo.fiscalizacao.Fiscalizacao, messageTemplate='{javax.validation.constraints.Null.message}'}
ConstraintViolationImpl{interpolatedMessage='must be null', propertyPath=dataFiscalizacao, rootBeanClass=class mz.co.sigit.teste.fiscalizacao.plano.processo.fiscalizacao.Fiscalizacao, messageTemplate='{javax.validation.constraints.Null.message}'}
ConstraintViolationImpl{interpolatedMessage='must be null', propertyPath=relatorio, rootBeanClass=class mz.co.sigit.teste.fiscalizacao.plano.processo.fiscalizacao.Fiscalizacao, messageTemplate='{javax.validation.constraints.Null.message}'}]]

我不明白为什么插值消息提示约束违规列表中的字段必须为空。

我使用了注释 @Null,因此数据库字段 属性 可以接受 NULL 值。虽然没有 null 值被传递到字段。

例如JSON中的plano字段:

"plano" : {
"planoFiscalizacao" : {
  "dataPrevisaoFim" : "2018-09-03T09:00:00.000+0200",
  "dataPrevisaoInicio" : "2018-08-03T09:00:00.000+0200",
  "selfId" : 201000000291,
  "loaded" : true,
  "managed" : false,
  "valid" : true
}

要在您的数据库中允许空值,您必须:

@Column(nullable = true)

@Null 根据 JSR-303

检查值是否为空