JPA多个OneToMany关系到同一个实体

7

我正在尝试构建一个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列表中,并将其持久化。但是,如果我再次加载它,持久化项目的同一对象会出现在itemsitems2两个列表中。
我尝试通过添加@JoinTable注释来解决这个问题,但我无法使其正常工作。
有什么建议吗?

这里有一个代码异味(重复的映射和相似的变量名)。您真正想要实现什么? - Perception
那只是一个小例子,以澄清问题。我遇到问题的实际情况太大了,无法在这里发布。 - Simiil
2个回答

5
在您的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
您的mappedBy属性链接到AbstractItem的一个名为parent的唯一属性,换句话说,您正在使用相同的属性将AbstractItemFolder进行链接。
如果将第二个列表映射为parent2,则AbstractItem表中将有2个外键指向Folder表。
如果不想在AbstractItem中添加新属性和新列,则可以使用两个关联表(对于itemsitems2)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接