java 新数组列表〈>().add()NPE

qlzsbp2j  于 2023-02-28  发布在  Java
关注(0)|答案(1)|浏览(110)
@Entity
@Getter
@Builder
@ToString
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Category {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "category_id")
    private Long id;

    private String name;
    private Long depth;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "parent")
    private Category parent;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "store_id")
    private Store store;

    @OneToMany(mappedBy = "parent")
    private List<Category> children = new ArrayList<>();

    public void addChild(Category child) {
        children.add(child);
    }
}

无法调用“java.util.List.add(Object)”,因为“this.children”为空
当我尝试parentCategory.addChild(childCategory)
我用一个空列表初始化了它,但是为什么会这样呢?
空列表是否为null?
我想知道初始化的正确方法。

soat7uwm

soat7uwm1#

我怀疑你正在使用构建器来构造Category的一个示例。在这样做的过程中,构建器用null覆盖了children集合,因为你没有在构建器链中传递它。
例如:

Category.builder().build(); // will return an instance of Category with null children collection

new Category(); // will return an instance of Category with children set to an empty ArrayList.

相关问题