我有一个简单的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
的网格。我正在使用JpaRespoitory
(repo.findAll()
)来获取它们。
用户现在可以选择MyObject
并在对话框中对其进行编辑。具有所选MyObject
和所有SubObject
的所有信息。用户可以在对话框中添加和删除SubObject。
对话框中有三个按钮:保存和关闭,保存和关闭
保存将保存MyObject
(repo.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