【问题标题】:JPA unable to retrieve child entries for parent-child mappingJPA 无法检索父子映射的子条目
【发布时间】:2015-12-30 09:47:26
【问题描述】:

我正在尝试在同一类中映射父子关系:

public class Category {        

    @Id
    @SequenceGenerator(name = "categorySeq", sequenceName = "category_id_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "categorySeq")

    @Column(name = "category_id", nullable = false)
    private Long id;

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

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

    @Column(name = "parent_id", nullable = true)
    private Long parentId;

    @ManyToOne
    @JoinColumn(name = "parent_id", insertable = false, updatable = false)
    public Category parentCategory;

    @OneToMany(mappedBy = "parentCategory", cascade = CascadeType.ALL)
    public List<Category> subCategories = new ArrayList<Category>();

}

当我对类别执行 GET 时,我只会得到 parentCategory,而 subCategories 显示为 null。我希望在 GET 上返回父条目和子条目。有什么想法吗?

【问题讨论】:

  • 嗯?您定义了一个序列生成器,然后定义为使用 IDENTITY 策略(而不是 SEQUENCE)。没有意义。完全没有。 IDENTITY 是使用“AUTOINCREMENT”而不是序列
  • 哦,是的,它应该是 SEQUENCE。谢谢。
  • 为什么将 parent_id 映射为基本映射和关系?由于您已将关系标记为有效只读,当您添加父级时,您是否也将子级添加到父级的子类别列表中?我建议您切换它,以便 parentId 是只读的,并且从关系中设置 parent_id 以便 JPA 可以在检索父级的序列值时为您设置字段,并验证您正在设置此双向关系的双方.
  • 感谢克里斯指出。

标签: jpa orm mapping parent-child


【解决方案1】:

好的,所以在关系的反面,我不得不通过设置 FetchType.EAGER 急切地获取它,它检索子条目,但现在杰克逊抱怨我必须使用 @JsonIgnore 的无限循环。但是,如果我使用 @JsonIgore 它会破坏这个问题的目的,因为我需要查看子条目。

但我想我意识到要解析整个层次结构树,我可以通过递归遍历每个孩子的父级来做到这一点。

@OneToMany(mappedBy = "parentCategory", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
public List<Category> subCategories = new ArrayList<Category>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 2013-05-26
    相关资源
    最近更新 更多