为什么 persist 方法被调用两次?
Why is persist method called twice?
在我的服务级别中,我从 Entity1 class 创建了一个新对象并保留它,然后在其上调用 setter。但毕竟,将创建另一个来自 Entity1 的对象并将其插入数据库(因此我将在 Entity1 table 中插入两行而不是一行)。 MyEntity1 与自身有 many-to-many
关系,我在调用 persist 方法后设置它。
我的问题是我找不到为什么要在我的应用程序中创建额外的 Entity1 对象。
我的服务class:
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 class 与自身有两个 oneToMany 关系(它是与附加列的 manyToMany 关系):
MyEntity1 class:
@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
时,它会变为 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
在我的服务级别中,我从 Entity1 class 创建了一个新对象并保留它,然后在其上调用 setter。但毕竟,将创建另一个来自 Entity1 的对象并将其插入数据库(因此我将在 Entity1 table 中插入两行而不是一行)。 MyEntity1 与自身有 many-to-many
关系,我在调用 persist 方法后设置它。
我的问题是我找不到为什么要在我的应用程序中创建额外的 Entity1 对象。
我的服务class:
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 class 与自身有两个 oneToMany 关系(它是与附加列的 manyToMany 关系):
MyEntity1 class:
@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
时,它会变为 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