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

@OneTomany及其Self类

邹开畅
2023-03-14

我需要的帮助是创建这个简单的类,其中categorycategory列表。当我尝试用父类别保存子类别列表时,它会出现show below错误。

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;

}
private Categorie getCatToPojo(CategorieVo categorieVo, String type) {
    double startTime = System.nanoTime();
    logger.info("Start Vo To Pojo Categorie");
    // #:- case:-1 when no sub-cat there it save only below 3 attribute
    this.categorie = new Categorie();
    this.saveNameCat(categorieVo, type);
    this.categorie.setDetail(categorieVo.getDetail());
    this.categorie.setStatus(categorieVo.getStatus());
    // #:- case:-2 when have list of sub-cat then will exe then next process
    if((CollectionUtils.isNotEmpty(categorieVo.getSubCategories()) && categorieVo.getSubCategories().size() > 0) && type.equalsIgnoreCase("P")) {
        logger.debug("Sub-Process....SubCategories...init");
        // #:- S-Cat will be get and
        List<Categorie> subCategories = this.businessServer.findAllById(categorieVo.getSubCategories())
                .stream().filter(categorie1 -> categorie1.getName().startsWith("S-") == true ).collect(Collectors.toList());
        // #:- if any wrong id pass it will not give you the list
        if(CollectionUtils.isNotEmpty(subCategories) && subCategories.size() > 0) {
            this.categorie.setSubCategories(subCategories);
        }
        logger.debug("Sub-Process....SubCategories...End " + categorieVo.getSubCategories().toString());
    }
    logger.debug(SecurityUtil.getPerfLog("Process Time For Convert the Vo to POJO", this.categorie.toString(), startTime));
    logger.info("End Vo To Pojo Categorie");
    return categorie;
}

private void saveNameCat(CategorieVo categorieVo, String type) {

    switch (type) {
        case "P":
            // #:- P,S will join with name
            this.categorie.setName(type + "-" + categorieVo.getName());
            break;
        case "S":
            // #:- P,S will join with name
            this.categorie.setName(type + "-" + categorieVo.getName());
            break;
        default:
            logger.info("End Vo To Pojo Categorie With Exception");
            // #:- will throw error bad request of type
            throw new BadTypeException(" [ " + "Bad Request Type" + " ]--[ " + type + " ]");
    }
}

共有1个答案

孔磊
2023-03-14

有一次我必须做同样的事情。下面是用于相同目的的工作代码:

@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;
    }
}
 类似资料:
  • 最常用的BIF之一,返回调用进程的pid。 语法 (Syntax) self() 参数 (Parameters) 没有 返回值 (Return Value) 返回调用进程的pid。 例如 (For example) -module(helloworld). -export([start/0]). start() -> io:fwrite("~p~n",[self()]). 输出 (

  • 在定义类的过程中,无论是显式创建类的构造方法,还是向类中添加实例方法,都要求将 self 参数作为方法的第一个参数。例如,定义一个 Person 类: 那么,self 到底扮演着什么样的角色呢?本节就对 self 参数做详细的介绍。 事实上,Python 只是规定,无论是构造方法还是实例方法,最少要包含一个参数,并没有规定该参数的具体名称。之所以将其命名为 self,只是程序员之间约定俗成的一种习

  • 超类Student包含:一个构造函数,它接受与学生就读的学校名称相对应的字符串;一个toString方法,它返回“Student at X”,其中X是学生就读的学校名称。 教师说明:您只编写了子类。在它中,您将有一个构造函数(它有一个参数-一个字符串),它将调用超类的构造函数,并将这个参数传递给它。它还将通过返回“high school”,然后返回超类的tostring方法中返回的内容来覆盖tos

  • 问题内容: 在子类中重写方法时,我经常这样做: 我的问题是:super(type(self),self)是否有捷径? 问题答案: 不要那样做:如果仅可以将其用作第一个参数,那么就不必将它放在第一位。您必须在此处传递实际的类,而不是如果该类已被子类化的表达式可能会更改的表达式。 super的第一个参数必须是包含当前方法定义的类,因为您要告诉super在基础列表中从哪里开始搜索。 Python 3知道

  • 主要内容:语法,示例SQL SELF JOIN 用于将一个表和自身连接,就好像存在两个表一样。为了区分两个表,在 SQL 语句中需要至少重命名一个表。 自连接通常用于将表的某个字段与该表的同一字段的其它值进行比较。 语法 SELF JOIN 的基本语法如下: 您看,SQL 并没有 SELF JOIN 关键字,而是使用 WHERE 子句来达到自连接的目的。 示例 自连接的语法比较简单,但是结果往往不是那么容易理解,让我

  • Updates Yarn to the latest version. yarn self-update Note: self-update is not available. See policies for enforcing versions within a project