我正在尝试构建一个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
列表中,并保留它。但是,如果我再次加载它,则persistet Item的相同Object位于列表items
和items2
中。
我尝试通过添加@JoinTable
注释来修复此问题,但我无法使其工作。
有什么建议吗?
答案 0 :(得分:3)
对于每种情况,您应该在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 :(得分:1)
您的mappedBy
属性正在链接到parent
的名为AbstractItem
的唯一属性,换句话说,您要将AbstractItem
和Folder
链接到parent2
属性。
如果将第二个列表映射为AbstractItem
,则Folder
到items
表中将有2个外键。
如果您不想在items2
中添加新属性和新列,请使用两个关联表(适用于AbstractItem
和{{1}})。