Vaadin spring-OneToMany关系的多次保存导致多次创建/删除

时间:2018-08-23 15:57:08

标签: java spring hibernate spring-data-jpa vaadin

我有一个简单的Vaading spring应用程序,其中包含以下实体:

@Entity
public class MyObject {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
[attributes, empty constructor, getters, setters, ...]

@OneToMany(mappedBy = "myObject", fetch = FetchType.EAGER, orphanRemoval = true)
private List<SubObject> subObjects;

public SubObject addSub(){
  SubObject sub = new SubObject();
  sub.setMyObject(this);
  this.subObjects.add(sub);
  return sub;
}

public SubObject removeSub(SubObject sub){
  sub.setMyObject(null);
  this.subObjects.remove(sub);
}

@Entity
public class SubObject {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

[attributes, empty constructor, getters, setters, ...]

@ManyToOne
@JoinColumn(name = "myObjectId", referencedColumnName = "id")
MyObject myObject;

用户有一个GUI,其中包含所有MyObjects的网格。我正在使用JpaRespoitoryrepo.findAll())来获取它们。 用户现在可以选择MyObject并在对话框中对其进行编辑。具有所选MyObject和所有SubObject的所有信息。用户可以在对话框中添加和删除SubObject。

对话框中有三个按钮:保存和关闭,保存和关闭 保存将保存MyObjectrepo.save(myObject))。 关闭将关闭对话框(window.close())。

现在创建问题: 用户添加SubObjec并保存->将插入一个SubObject。 然后,用户添加第二个SubObjec并保存->将插入两个SubObject(新的和第一个添加的一个)

,带有删除: 用户删除SubObject(例如id = 1)并保存。 然后,用户删除第二个SubObject并保存-> Caused by: javax.persistence.EntityNotFoundException: Unable to find SubObject with id 1

如何防止Spring / JPA多次执行操作,尽管它们已经在过去执行了? 我是否必须刷新实体,如果是,如何? (我尝试https://www.javabullets.com/add-entitymanager-refresh-spring-data-repositories/保存后执行,但它说:实体不受管理)

谢谢。

一些(男性)有用的信息: 瓦丹8.4.5 spring-boot-starter-parent 2.0.4.RELEASE org.hibernate.javax.persistence 1.0.2。最终 MySQL的连接器的Java 5.1.47 休眠核心5.2.17.FINAL

0 个答案:

没有答案