Hibernate @ManyToOne @OneToMany为同一个实体

时间:2012-05-30 13:23:38

标签: java hibernate

我正在尝试创建一个实体,该实体具有父类和与他相同类型的子项(如树)。

这是代码:

  

@Entity   @Table(name =“areas”)   公共课区{

@Id
@Column(name = "id")
@GeneratedValue
private int id;

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

@Column(name = "area_type", nullable = true)
private int areaType;

@ManyToOne
@JoinColumn(name="parent_area_id")
private Area parentArea;

@OneToMany (fetch = FetchType.EAGER, mappedBy = "parentArea")
@Cascade({CascadeType.ALL})
private Collection<Area> childAreas = new ArrayList<Area>();

我在堆栈溢出的几个帖子中看到过这段代码 首先,当我尝试将这样的实体保存到数据库时,我得到:

nested exception is org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
此外,我对此设计还有一些不完全了解。

如果子区域由父区域映射。这不就意味着“这个”区域将成为孩子们的一部分吗? 换句话说......儿童区域不是“这个”班级的父母区域的孩子。

感谢。

1 个答案:

答案 0 :(得分:2)

This似乎是一个类似的问题。你应该试试:

@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany (mappedBy = "parentArea")
@Cascade({CascadeType.ALL})
private Collection<Area> childAreas = new ArrayList<Area>();