java - JPA 对同一实体的多个 OneToMany 关系

标签 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 列表中,并保存它。但是,如果我再次加载它,持久化项的相同对象将出现在列表 itemsitems2 中。

我试图通过添加一个 @JoinTable 注释来解决这个问题,但我无法让它工作。

有什么建议吗?

最佳答案

对于每种情况,您应该在 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>();

关于java - JPA 对同一实体的多个 OneToMany 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15023883/

相关文章:

java - JPA native 查询获取单个对象

jpa - 自 Java 10.0 NullPointer 在搜索持久性时 - JPA eclipselink 2.6.5

java - 使用 JPA 以一对多方式添加子项时未返回 ID

Java 线程竞争条件与 BlockingQueue

java - 如何在 Hibernate 中自动将普通列的值设置为主列的值

java - 如何用真正的多语言字符串做一个应用程序?

java - Maven 3.2.1 + Hibernate 4.3.4 - 无法构建实体管理器工厂 - 由 : ParameterizedTypeImpl cannot be cast to java. lang.Class 引起

jpa - 如何使用实体类获取entityManager

java - JPA:在单个持久性单元上映射多个 Oracle 用户

java - 将 arraylist(integer) 转换为整数数组