JPA映射与同一实体(类别,子类别和父类别)的关系

时间:2014-09-04 11:22:46

标签: java jpa recursion jpa-2.0

我正在尝试解决有关同一实体的子类别和父类别的类别的问题。我的数据库已设置好,我无法更改。所以,我用这种方式映射了我的实体:

public class Category implements Serializable {

    private static final long serialVersionUID = -3432724244623524272L;

    @Id
    @Column(name = "id")
    private Long id;

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

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

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

    @ManyToOne(targetEntity = Category.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "parent_key", referencedColumnName = "key")
    private Category parentCategory;

    @OneToMany(mappedBy = "parentCategory", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Category> childCategories;

    //getters and setters ommited
}

请注意,子类别和父类别未使用ID属性进行映射,但是&#34;键&#34;属性。这个&#34;关键&#34;不是FK。当JPA试图获取数据时,我的应用程序崩溃了。但这次崩溃看起来像一个无限循环。没有例外。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

可能的无限循环:

  1. 您加载对象A
  2. 此对象有一个子B,由于您使用FetchType.EAGER
  3. ,因此也会加载该子对象
  4. B有一个父级,即A,再次加载
  5. 尝试使用FetchType.LAZY