4

我正在尝试构建一个 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注释来解决这个问题,但我无法让它工作。

有什么建议么?

4

2 回答 2

4

对于每种情况,您的 AbstractItem 中都应该有两个对“文件夹”的引用。因此,应该相应地指定 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>();
于 2013-02-22T12:10:24.353 回答
1

您的mappedBy属性链接到一个名为parentof的唯一属性AbstractItem,换句话说,您正在链接AbstractItemFolder通过相同的属性。
如果将第二个列表映射为parent2,则表中将有 2 个外AbstractItemFolder
如果您不想要新属性items和.items2AbstractItem

于 2013-02-22T12:12:24.277 回答