Java JPA与同一实体的多个一对多关系
我正在尝试构建一个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
@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
),这里有一种代码气味(重复的映射和近似重复的变量名)。你到底想实现什么?这只是一个澄清问题的小例子。我遇到这个问题的实际环境是太大了,不能在这里发布