【发布时间】:2015-03-12 12:46:40
【问题描述】:
在我的服务级别中,我从 Entity1 类创建一个新对象并将其持久化,然后在其上调用 setter。但毕竟,来自 Entity1 的另一个对象将被创建并插入到数据库中(所以我将在 Entity1 表中插入两行而不是一行)。 MyEntity1 与自身有many-to-many 关系,我在调用persist 方法后设置它。
我的问题是我找不到为什么在我的应用程序中创建了一个额外的 Entity1 对象。
我的服务等级:
MyEntity1 e1 = new MyEntity1();
em.persist(e1);
MyEntity2 e2 = new MyEntity2();
e2.setChild(e1);
e2.setParent(e1);
e1.getParent().add(e2);
e1.getChildren().add(e2);
MyEntity1 类与自身有两个 oneToMany 关系(它是一个与附加列的 manyToMany 关系):
MyEntity1 类:
@OneToMany(cascade=CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "child", orphanRemoval = true)
private List<MyEntity2> parent = new ArrayList<MyEntity2>();
@OneToMany(cascade=CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "parent")
private List<MyEntity2> children= new ArrayList<MyEntity2>();
【问题讨论】:
-
你能更具体地谈谈这个问题吗?你说persist被调用了两次,这是应用程序调用的东西,而不是JPA,而在你的描述中你说“两个不同的对象被创建并存储在数据库中。”。创建了哪两个不同的对象,您如何指定实体的主键来区分它们?哪个实体有问题?
-
是的,我编辑了这个问题。将创建一个额外的 Entity1 对象。
标签: java jpa many-to-many eclipselink