如果属性对 JPA 无效,我如何在数据库中插入默认值

Posted

技术标签:

【中文标题】如果属性对 JPA 无效,我如何在数据库中插入默认值【英文标题】:How can i insert default value in database if attributes is not valid with JPA 【发布时间】:2022-01-16 04:56:40 【问题描述】:

我想从 dto 对象中设置值并使用 save jpa 存储库方法将它们插入数据库中,如果属性无效(null 或大小更长),我可以使用 jpa 插入默认值吗?

dto 对象:

public class SocleList implements Serializable 

    private static final long serialVersionUID = -5008625218377596565L;
    @JsonProperty("records")
    @Valid
    private List<Socle> SocleList;


@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString

public class Socle implements Serializable 

    private static final long serialVersionUID = -1864310486952111265L;

    @NotNull
    public int iDTechn;

    @NotNull
    @Max(value = 99999)
    private Integer code;

    @NotNull
    private String codeType;

    @NotNull
    @Size(min = 1, max = 2)
    private String red;

    private @NotNull
    @Max(value = 99999)
    Integer FPrinci;

    private @NotNull
    @Max(value = 99999)
    Integer surface;

    @NotNull
    @Size(min = 1, max = 2)
    private String Xnseigne;

我使用验证器来控制值:

public static int validate(SocleList SocleList,
        Validator validator) 
        Set<ConstraintViolation<SocleList>> violations;
        violations = validator.validate(socleList);

        log.info("Nombre de violations : ", violations.size());

        for (ConstraintViolation<SocleList> constraintViolation : violations) 

        log.info("Valeur '' incorrecte pour '' : '' "
        , constraintViolation.getInvalidValue()
        , constraintViolation.getPropertyPath()
        , constraintViolation.getMessage());
        
        return violations.size();
        

【问题讨论】:

如果输入无效,你打算如何抛出异常? 最好让数据库处理默认值,以便在创建表时使该列具有默认值,并且根据您的验证,您不提供它的值 @Sreyas 如果 violation.size() 大于 0 我不插入数据库 @justsomeone 我在创建表时在数据库中指定了一个默认值,但是如何忽略无效属性并插入默认值? @AnassEL 检查这两个链接 ***.com/questions/1281952/… baeldung.com/jpa-transient-ignore-field 【参考方案1】:

我做了一个基本的方法来验证属性值,例如:

 @JsonProperty("Code")
    @NotNull
    @Max(value = 99999)
    private Integer code;

我用这种方法检查:

 public void setValidCode(Integer code) 
        if (code== null || code > 99999)
            this.code= 0;
        else
            this.code= code;
    

【讨论】:

以上是关于如果属性对 JPA 无效,我如何在数据库中插入默认值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JPA 和 Hibernate 设置默认查询超时?

如何使用 JPA/Hibernate 在孩子的 id 中引用父母的 id?

Spring JPA:如何在不丢失数据的情况下进行更新插入

php中的mysql数据库的,字段默认值该怎么输入,啥格式?

Spring+Jpa插入boolean属性出现异常问题

如何在 JPA 中构造插入查询