JPA Multiple OneToMany与同一实体的关系

时间:2013-02-22 12:06:39

标签: java jpa eclipselink one-to-many

我正在尝试构建一个JPA应用程序。我基本上有

@Entity
public class Folder {
  @Id
  @GeneratedValue(strategy = GenerationType.TABLE)
  private int id;
  private String description;
  private String name;

  @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST)
  private List<AbstractItem> items = new LinkedList<AbstractItem>();

  @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST)
  private List<AbstractItem> items2 = new LinkedList<AbstractItem>();
  .
  .
  .
}

我可以成功将一个项目添加到item列表中,并保留它。但是,如果我再次加载它,则persistet Item的相同Object位于列表itemsitems2中。

我尝试通过添加@JoinTable注释来修复此问题,但我无法使其工作。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

对于每种情况,您应该在AbstractItem中有两个对“Folder”的引用。因此,应相应地指定mappedBy值,例如:

  @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST)
  private List<AbstractItem> items = new LinkedList<AbstractItem>();

  @OneToMany(mappedBy = "parent2", cascade = CascadeType.PERSIST)
  private List<AbstractItem> items2 = new LinkedList<AbstractItem>();

答案 1 :(得分:1)

您的mappedBy属性正在链接到parent的名为AbstractItem的唯一属性,换句话说,您要将AbstractItemFolder链接到parent2属性。
如果将第二个列表映射为AbstractItem,则Folderitems表中将有2个外键。
如果您不想在items2中添加新属性和新列,请使用两个关联表(适用于AbstractItem和{{1}})。