我有3个实体:“人”,“文件”,“PersonDocument”这关系如下:Hibernate的级联删除不起作用
class Person {
@Cascade(CascadeType.ALL)
@OneToMany(mappedBy = "person", orphanRemoval = true, fetch = FetchType.LAZY)
Set<PersonDocument> personDocuments;
}
class Document {
@OneToMany(mappedBy = "document")
Set<PersonDocument> personDocuments;
}
@IdClass(PersonDocumentPK.class)
public class PersonDocument {
@Id
private Person person;
@Id
private Document document;
@ManyToOne(fetch = FetchType.LAZY)
private Provider provider;
}
public class PersonDocumentPK implements Serializable {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "person_guid")
private Person person;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "documents_guid")
private Document document;
}
在我的代码,我想从Person#personDocuments
删除一些记录并添加新的记录。我这样做,如:
Iterator it = person.getPersonDocuments().iterator();
PersonDocument pd = it.next();
if (some logic) it.remove();
...
person.getPersonDocuments().addAll(new set of values);
在结果取出personDocuments
已经disappeard,但相关的documents
留在数据库中。为什么如此?
在这种情况下,我得到异常:'从model.entity.PersonDocumentPK被改变model.entity.PersonDocument的一个实例的标识@ f224a1f1 to model.entity.PersonDocumentPK @ de57b5f' –
你可以看到mkyoung例子https://www.mkyong.com/hibernate/hibernate-cascade-example-save-update-delete-and-delete-orphan/,你也可以直接从mysqlWorkbech中将cascad删除 –