2015-10-02 44 views
0

我試圖映射與-同一類中的父子關係:當我做類別GET我只得到parentCategoryJPA無法檢索親子映射子條目

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>(); 

} 

並且subCategories出現爲空。我希望在GET上返回父項和子項。任何想法這裏有什麼不對?

+0

咦?您定義了一個序列生成器,然後定義使用IDENTITY策略(而不是SEQUENCE)。沒有意義。完全一樣。 IDENTITY是使用「AUTOINCREMENT」而不是序列 –

+0

哦,是的,它應該是序列。謝謝。 – UsmanChaudhri

+0

爲什麼將parent_id映射爲基本映射和關係?由於您已將關係標記爲有效只讀,因此添加父項時,是否還要將子項添加到父類的subCategories列表中?我建議你切換它,以便parentId是隻讀的並且根據關係設置parent_id,以便JPA可以在檢索父級序列值時爲您設置字段,並驗證您是否正在設置此雙向關係的兩側。 – Chris

回答

0

好吧,在關係的反面,我不得不通過設置FetchType.EAGER來獲取它,但它現在檢索子條目,但現在Jackson抱怨無限循環,我必須使用@JsonIgnore。但是,如果我使用@JsonIgore它會打敗這個問題的目的,因爲我需要看到子項。

但我想我意識到,要解析整個層次結構樹,我可以通過遞歸遍歷每個孩子的父親來做到這一點。

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