在我的服务级别,我从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>();
答案 0 :(得分:0)
如果我理解正确(没有一些代码就很难),你坚持一个实体,然后再添加一个与另一个实例的关系?
当您在某个实体上调用persist
时,它变为managed entity
,这意味着JPA提供商现在可以管理其生命周期。这意味着您不再需要在其上调用merge
或persist
以保存更改。 JPA提供程序自动执行此操作,这就是第二个实体也被保留的原因。
MyEntity e1 = new MyEntity();
em.persist(e1); // this persists the entity, and makes it managed
MyEntity e2 = new MyEntity();
e1.setRelation(e2);
// this will also persist (if cascade is properly configured) e2 at the end of transaction, without you persisting it manually