Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA与同一实体的多个一对多关系_Java_Jpa_Eclipselink_One To Many - Fatal编程技术网

Java JPA与同一实体的多个一对多关系

Java JPA与同一实体的多个一对多关系,java,jpa,eclipselink,one-to-many,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) p

我正在尝试构建一个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>();
  .
  .
  .
}
@实体
公共类文件夹{
@身份证
@GeneratedValue(策略=GenerationType.TABLE)
私有int-id;
私有字符串描述;
私有字符串名称;
@OneToMany(mappedBy=“parent”,cascade=CascadeType.PERSIST)
私有列表项=新建LinkedList();
@OneToMany(mappedBy=“parent”,cascade=CascadeType.PERSIST)
私有列表项2=新的LinkedList();
.
.
.
}
我可以成功地将一个项目添加到
项目
列表中,并将其持久化。但是,如果我再次加载它,persistet项的同一个对象在两个列表
items
items2

我试图通过添加一个
@JoinTable
注释来解决这个问题,但无法使其正常工作


有什么建议吗?

对于每种情况,您应该在摘要项中有两个对“文件夹”的引用。因此,应相应地指定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>();
@OneToMany(mappedBy=“parent”,cascade=CascadeType.PERSIST)
私有列表项=新建LinkedList();
@OneToMany(mappedBy=“parent2”,cascade=CascadeType.PERSIST)
私有列表项2=新的LinkedList();

您的
mappedBy
属性正在链接到
AbstractItem
的名为
parent
的唯一属性,换句话说,您正在通过相同属性链接
AbstractItem
文件夹

如果将第二个列表映射为
parent2
,则
AbstractItem
中将有2个外键映射到
文件夹


如果您不想在
AbstractItem

中使用新属性和新列,请使用两个关联表(用于
项2
),这里有一种代码气味(重复的映射和近似重复的变量名)。你到底想实现什么?这只是一个澄清问题的小例子。我遇到这个问题的实际环境是太大了,不能在这里发布