Cri*_*riu 10 java hibernate jpa
我有这种实体:
文件| n ..到.1 | DocumentType | 1 ..到.. n | PropertyType | 1 ..到.. n | DocumentProperty
我只是尝试删除一个文件,如:entityManager.remove(document);
但错误是触发:
16:45:51,499 ERROR [[Seam Resource Servlet]] servlet的Servlet.service()Seam资源Servlet抛出异常javax.persistence.EntityNotFoundException:传递给persist的已删除实体:[up.docstore.PropertyType#]
问题似乎来自这里:
@OneToMany(mappedBy = "documentType", cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
@ForeignKey(name = "FK_DOCUMENT_TYPE__PROPERTY_TYPE")
@Sort(type = SortType.NATURAL)
private SortedSet<PropertyType> propertyTypes = new TreeSet<PropertyType>();
Run Code Online (Sandbox Code Playgroud)
如果我删除CascadeType.PERSIST所有它的工作.但我需要它,我也需要它.
有谁知道其他解决方案?
编辑:删除DELETE_ORPHAN级联,但仍然是同样的问题.
Cri*_*riu 12
解:
- @ManyToOne关系中有一个CascadeType.REMOVE!删除它.
为什么这个解决方
- 如果你想删除一个孩子,你肯定不想删除它的父母,因为可能有其他孩子与那个父母有关.
我假设你之前已经打过remove()一个类型PropertyType.remove()仅调用"root"实体,并使用以下内容删除其他实体:
document.getDocumentType().getPropertyTypes().remove(propertyType);
Run Code Online (Sandbox Code Playgroud)
并保留 DELETE_ORPHAN
然后,您可以在验证未手动调用remove()其他实体后尝试调用:
document = entityManager.merge(document);
entityManager.remove(document);
Run Code Online (Sandbox Code Playgroud)
以便EntityManager首先将对象与会话重新关联.
| 归档时间: |
|
| 查看次数: |
28145 次 |
| 最近记录: |