当前位置: 首页 > 知识库问答 >
问题:

错误:“XX”列中的空值违反非空约束SPRING

越昊穹
2023-03-14

我有亲子关系。当我时。save要在标识符相同时插入,我希望它更新。

这是我的服务:

@Override
public MsExplodedDTO saveExplodedFactory(MsExplodedFactoryRequestDTO exploded) {
    
    MsProduct prod = msProductRepo.findByProductCode(exploded.getProductCode())
            .orElseThrow(() -> new ResourceNotFound("Data Produk tidak ditemukan!"));

    
    exploded.setProductCode(prod.getId().toString());
    
    MsExploded exp;
    if (explodedRepo.findByExplodedCodeIgnoreCase(exploded.getExplodedCode()).size() > 0) {
        
        MsExploded oldExploded = explodedRepo.findByExplodedCode(exploded.getExplodedCode())
                .orElseThrow(() -> new ResourceNotFound("Data tidak ditemukan!"));
        
        return updateExplodedFactory(exploded, prod);
    }else {
        exp = mapper.DTO2Entity(exploded);
        exp.setId(0L);
        exp.getExplodedDt().forEach(d -> {
            d.setExplodedhd(exp);
        });
        
        return mapper.entity2DTO(explodedRepo.save(exp));
    }
    
}

@Override
public MsExplodedDTO updateExplodedFactory(MsExplodedFactoryRequestDTO exploded, MsProduct prod) {

    MsExploded oldExploded = explodedRepo.findByExplodedCode(exploded.getExplodedCode())
            .orElseThrow(() -> new ResourceNotFound("Data tidak ditemukan!"));

    if (oldExploded.getIsDeleted()) {
        throw new ResourceNotAcceptable("Kode Exploded " + oldExploded.getExplodedCode() + " telah dihapus");
    }

    oldExploded = mapper.updateDTO2Entity(exploded, oldExploded);
    oldExploded.setProduct(prod);
    

    for (MsExplodedDetail exp : oldExploded.getExplodedDt()) {
        exp.setExplodedhd(oldExploded);
    }

    MsExploded obj = explodedRepo.save(oldExploded);

    return mapper.entity2DTO(obj);
}

当我调试更新时,它说

错误:“ms\u exploded\u header\u id”列中的null值违反非null约束详细信息:失败行包含(20,333,2,null,null,null,null,null,null,null,null,null)。

虽然我已经按应有的方式插入了存储库,但在保存新存储库时没有问题,但在更新父或子存储库时却没有问题。

这是我的标题实体:

@Data
@Audited
@EntityListeners(AuditingEntityListener.class)
@Entity
@Table(name = "ms_exploded")
@EqualsAndHashCode(callSuper = false, of = "id")
@ToString(of = { "id" })
public class MsExploded extends AuditField implements Serializable {
XX
XX
XX
@OneToMany(mappedBy = "explodedhd", orphanRemoval = true, cascade = CascadeType.ALL)
    private List<MsExplodedDetail> explodedDt = new ArrayList<>();
}

这是我的孩子实体:

@Data
@Audited
@EntityListeners(AuditingEntityListener.class)
@Entity
@Table(name = "ms_exploded_detail")
public class MsExplodedDetail implements Serializable {
XX
XX
XX
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
    @JsonIgnore
    @ManyToOne(targetEntity = MsExploded.class)
    @JoinColumn(name = "ms_exploded_header_id", referencedColumnName = "id")
    private MsExploded explodedhd;
}

我很确定在调试时,ms\u exploded\u header\u id与头id一起插入。但我不知道为什么它取消并返回了错误。

共有1个答案

东方和煦
2023-03-14

确保msexplod。explodedDt和msexplodeDetail。explodedhd始终一致。一、 e.以下断言应成立:

msExploded.explodedDt.forEach(dt -> assertThat(dt.explodedhd).isEqualTo(msExploded);
assertthat(msExplodedDetail.explodedhd).contains(msExplodedDetail)

我怀疑你(或地图绘制者)离开了MsExplodedDetail。在向MSExplod添加细节时,分解DHD。

 类似资料:
  • 这是我的代码,但当我尝试插入另一个“analise”时,num\u cedula,num\u doente,data\u analise为NULL,它会给我这个错误(“错误:num\u cedula”列中的NULL值违反了非NULL约束细节:失败的行包含(32,Ortopedia,NULL,NULL,NULL,NULL,2019-12-02,glicemia,176,Instituicao1)。S

  • 问题内容: 我有以下代码: 它尝试创建具有给定ID和电子邮件的用户,如果已经存在一个用户-尝试获取现有记录。 我知道这是一个不好的构造,无论如何都会对其进行重构。但是我的问题是这样的: 我如何确定发生了什么:一种与约束违反有关的(在(user_id,电子邮件)上有唯一键)或一种与约束有关的(不能为null)? 问题答案: psycopg2作为成员提供了例外,它为您提供了相当细粒度的错误信息以进行匹

  • 我在postgresql中创建了一个存储过程,如下所示: 是->的类型 我在插入时得到如下错误:

  • 当我打印申请者的技能列表时,我有以下内容: 下面是一张表格,列出了申请人和技能之间的联系: 但是当我试图保存申请者时,我有这样一个提示:失败的行包含(23,null,null,499)。有人能给我解释一下吗?我正在使用jpa注释开发一个spring应用程序。

  • 堆栈溢出。 和 详细信息:失败行包含(18,Item Name在这里,这是描述,40.00,items/pattern.png,lXBjgo70QIrI8aF,1,null)。 这是完整的回溯 null 提前谢谢你

  • 主要内容:在创建表时设置非空约束,在修改表时添加非空约束,删除非空约束MySQL非空约束(NOT NULL)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不能为空。 比如,在用户信息表中,如果不添加用户名,那么这条用户信息就是无效的,这时就可以为用户名字段设置非空约