Java @一家一家的It公司';自我阶级

Java @一家一家的It公司';自我阶级,java,hibernate,spring-mvc,jpa,spring-data-jpa,Java,Hibernate,Spring Mvc,Jpa,Spring Data Jpa,我所需要的帮助就是创建这个简单的类,其中Category有Categories的列表。当我试图用父类别保存子类别列表时,会出现如下错误 Json:- { "name": "n11111111", "detail": "detail", "status" : "AVAILABLE", "subCategories": [3, 12, 100, 7, 11] // id of sub-cat } 类别:- @Entity @Table(name = "categor

我所需要的帮助就是创建这个简单的类,其中
Category
Categories
的列表。当我试图用父类别保存子类别列表时,会出现如下错误

Json:-

{
    "name": "n11111111",
    "detail": "detail",
    "status" : "AVAILABLE",
    "subCategories": [3, 12, 100, 7, 11] // id of sub-cat
}
类别:-

@Entity
@Table(name = "category")
public class Category{

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    @Column(nullable = false, updatable = false, name = "category_id")
    private Long id;

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

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

    @Column(nullable = false, name = "status")
    @Enumerated(EnumType.ORDINAL)
    private Status status;

    @OneToMany( targetEntity=Category.class, cascade=CascadeType.ALL)
    private List<Category> subCategories;

}

有一次,我不得不做完全相同的事情。以下是用于相同目的的工作代码:

@Entity
@Data
@NoArgsConstructor
@Table(name = "categories")
public class Category {
    @JsonProperty("Id")
    @Id
    private int id;

    @JsonProperty("Code")
    private String code;

    @JsonProperty("Name")
    private String name;

    @JsonProperty("ParentId")
    @Column(name = "parent_id")
    private Integer parent;

    @JsonProperty("NewAdminId")
    private int newAdminId;

    @JsonProperty("VolumetricWeight")
    @Column(name = "volumetricWeight")
    private Float volumetricWeight = 0.0f;

    @JsonProperty("Nodes")
    @OneToMany(
            cascade = CascadeType.ALL,
            fetch = FetchType.EAGER,
            orphanRemoval = true)
    @JoinColumn(name = "parent_id")
    private List<Category> categories;

    public Category(int id, String code, String name, int newAdminId, List<Category> categories) {
        this.id = id;
        this.code = code;
        this.name = name;
        this.newAdminId = newAdminId;
        this.categories = categories;
    }
}
@实体
@资料
@诺尔格构装师
@表(name=“categories”)
公共类类别{
@JsonProperty(“Id”)
@身份证
私有int-id;
@JsonProperty(“代码”)
私有字符串码;
@JsonProperty(“名称”)
私有字符串名称;
@JsonProperty(“父ID”)
@列(name=“parent\u id”)
私有整数父;
@JsonProperty(“NewAdminId”)
私有int-newAdminId;
@JsonProperty(“VolumeTricWheet”)
@列(name=“volumetricWeight”)
私人浮动体积重量=0.0f;
@JsonProperty(“节点”)
@独身癖(
cascade=CascadeType.ALL,
fetch=FetchType.EAGER,
(删除=真)
@JoinColumn(name=“parent\u id”)
私人名单类别;
公共类别(int-id、字符串代码、字符串名称、int-newAdminId、列表类别){
this.id=id;
this.code=代码;
this.name=名称;
this.newAdminId=newAdminId;
这个。类别=类别;
}
}

import java.util.Set;
导入javax.persistence.Column;
导入javax.persistence.Entity;
导入javax.persistence.FetchType;
导入javax.persistence.GeneratedValue;
导入javax.persistence.GenerationType;
导入javax.persistence.Id;
导入javax.persistence.JoinColumn;
导入javax.persistence.JoinTable;
导入javax.persistence.ManyToMany;
导入javax.persistence.Table;
导入org.hibernate.annotations.Cascade;
导入org.hibernate.annotations.CascadeType;
@实体
@表(name=“category”)
公共类类别{
@抑制警告(“未使用”)
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id”)
私有int-id;
@列(name=“name”)
私有字符串名称;
@ManyToMany(fetch=FetchType.EAGER)
@级联({CascadeType.ALL})
@JoinTable(name=“subcategory”,
joinColumns={@JoinColumn(name=“idcategory”)},
inverseJoinColumns={@JoinColumn(name=“idsubcategory”)})
私人设置catlist;
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共集合getCatlist(){
返回catlist;
}
公共无效设置catlist(设置catlist){
this.catlist=catlist;
} 
}

我可以查看执行保存操作的代码吗?理论上,您应该先加载子载波,创建父catg,执行所有设置父舞蹈,然后保存父舞蹈…可能重复@Despader sure plz查看代码。我将vo转换为pojo,并使用简单的存储库接口方法saveAFAIK保存pojo类。这将在eclipselink作为JPA实现的情况下开箱即用,Hibernate不接受这一点。我不得不将一个项目切换到hibernate,这就是我注意到的。如响应底部所示,您应该创建两个表*Category具有(id,name)*子类别(idcategory,idsubcategory)idcategory引用Category.id idsubcategory引用Category.id(插入值)示例中的Category 1(id=1)有两个子类别(id=2和id=3)我有两个父类别,如(A,B),我也有两个子类别,如(1,2)我希望A有两个子类别,B有两个子类别和更多类别。。。但在上面,它将创建
,但当我尝试将子cat分配给两者时,它不会分配,因为我们只将子cat分配给一个父级,而如果我们尝试分配给任何其他父级cat,它将替换旧的父级cat。我认为最好为关系创建另一个表,并为其使用@JoinTable注释
@Entity
@Data
@NoArgsConstructor
@Table(name = "categories")
public class Category {
    @JsonProperty("Id")
    @Id
    private int id;

    @JsonProperty("Code")
    private String code;

    @JsonProperty("Name")
    private String name;

    @JsonProperty("ParentId")
    @Column(name = "parent_id")
    private Integer parent;

    @JsonProperty("NewAdminId")
    private int newAdminId;

    @JsonProperty("VolumetricWeight")
    @Column(name = "volumetricWeight")
    private Float volumetricWeight = 0.0f;

    @JsonProperty("Nodes")
    @OneToMany(
            cascade = CascadeType.ALL,
            fetch = FetchType.EAGER,
            orphanRemoval = true)
    @JoinColumn(name = "parent_id")
    private List<Category> categories;

    public Category(int id, String code, String name, int newAdminId, List<Category> categories) {
        this.id = id;
        this.code = code;
        this.name = name;
        this.newAdminId = newAdminId;
        this.categories = categories;
    }
}
insert into `db`.`category` values (1, 'a');

insert into `db`.`category` values (2, 'b');

insert into `db`.`category` values (3, 'c');

commit;

insert into `db`.`subcategory` values (1, 2);
insert into `db`.`subcategory` values (1, 3);
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;


@Entity
@Table(name = "category")
public class Category {


    @SuppressWarnings("unused")
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="id")
    private int id; 


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

    @ManyToMany(fetch=FetchType.EAGER)
    @Cascade({CascadeType.ALL})
    @JoinTable(name="subcategory", 
            joinColumns={@JoinColumn(name="idcategory")}, 
            inverseJoinColumns={@JoinColumn(name="idsubcategory")}) 
    private Set<Category> catlist;


    public int getId() {
        return id;
    }


    public void setId(int id) {
        this.id = id;
    }


    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }


    public Set<Category> getCatlist() {
        return catlist;
    }


    public void setCatlist(Set<Category> catlist) {
        this.catlist = catlist;
    } 


}