【问题标题】:problem in handling one-to-many and many-to-one mapping处理一对多和多对一映射的问题
【发布时间】:2020-09-19 01:34:49
【问题描述】:

问题是当我为已经存在的类别添加 sous_categorie 时,会出现异常

java.sql.SQLIntegrityConstraintViolationException: Le champ 'id_cat' ne peut être vide (null)

我使用 postman 来测试 API

{
"id_Cat": "1274d819-ca54-455b-b69f-07a3f8b345c0",
"souCatName": "hospitals"
}

类 DBCategorie

@Entity
@Table(name = "categorie")
public class DBCategorie {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
private String idCat;

private String catName;

@OneToMany(mappedBy = "categorie")
private List<DBSousCategorie> souscategorie;

public DBCategorie() {
}
//getters& setter

public DBCategorie(String idCat, String catName, List<DBSousCategorie> souscategorie) {
    super();
    this.idCat = idCat;
    this.catName = catName;
    this.souscategorie = souscategorie;
}

public DBCategorie(String idCat, String catName) {
    this.idCat = idCat;
    this.catName = catName;
}

类 DBSousCategorie

@Entity
@Table(name = "souscategorie")
public class DBSousCategorie {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
private String idSouCat;

private String souCatName;

@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="id_Cat")
private DBCategorie categorie;

@OneToMany(mappedBy = "souscategorie")
private List<DBFile> files;

public DBSousCategorie() {
}

//Getters & Setters

public DBSousCategorie(String idSouCat, String souCatName, DBCategorie categorie) {
    super();
    this.idSouCat = idSouCat;
    this.souCatName = souCatName;
    this.categorie = categorie;
}

【问题讨论】:

    标签: mysql spring-boot hibernate


    【解决方案1】:

    您是否在持久化之前将父类别对象设置为 sous_category ?

    dbSousCategory.setCategory(categorie);
    subCategoryService.save(dbSousCategory);
    

    为了避免递归,请使用@JsonIgnore 忽略父类别。

    @Entity
    @Table(name = "souscategorie")
    public class DBSousCategorie {
    @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "uuid2")
    private String idSouCat;
    
    private String souCatName;
    
    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="id_Cat")
    @JsonIgnore
    private DBCategorie categorie;
    
    @OneToMany(mappedBy = "souscategorie")
    private List<DBFile> files;
    
    public DBSousCategorie() {
    }
    
    //Getters & Setters
    
    public DBSousCategorie(String idSouCat, String souCatName, DBCategorie categorie) {
        super();
        this.idSouCat = idSouCat;
        this.souCatName = souCatName;
        this.categorie = categorie;
    }
    

    【讨论】:

    • 是的,但是当列出所有类别时,它会导致无限循环
    • 然后尝试对父类别使用@JsonIgnore。生病编辑答案
    • 不再有无限循环,但 id 仍然存在同样的问题
    • 能否将控制器和服务代码添加到问题中以查看更多详细信息
    猜你喜欢
    • 2021-08-22
    • 2011-07-17
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 2011-03-09
    • 2020-11-30
    相关资源
    最近更新 更多