У меня проблема с удалением сущностей в моем приложении JPA: в основном я использую этот метод EJB Business:
load photo list ;
for each photo {
//UPDATE
remove TagPhoto element from @OneToMany relation
//DISPLAY
create query involving TagPhoto
...
}
, и этот последний запрос всегда вызывает исключение EntityNotFoundException (удаленная сущность, переданная для сохранения: [... TagPhoto #])
Мне кажется, я понимаю значение этого исключения, как проблема синхронизации, вызванная моим удалением, но как я могу от нее избавиться?
РЕДАКТИРОВАТЬ: вот стек исключений:
Caused by: javax.persistence.EntityNotFoundException: deleted entity passed to persist: [net.wazari.dao.entity.TagPhoto#<null>]
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:621)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:74)
at net.wazari.dao.jpa.TagFacade.loadVisibleTags(TagFacade.java:108)
и отображение между Tag-TagPhoto-Photo
public class Tag implements Serializable {
...
@OneToMany(cascade = CascadeType.ALL, mappedBy = "tag")
private List<TagPhoto> tagPhotoList;
}
public class TagPhoto implements Serializable {
...
@JoinColumn(name = "Tag", referencedColumnName = "ID")
@ManyToOne(optional = false)
private Tag tag;
@JoinColumn(name = "Photo", referencedColumnName = "ID")
@ManyToOne(optional = false)
private Photo photo;
}
public class Photo implements Serializable {
...
@OneToMany(cascade = CascadeType.ALL , mappedBy = "photo")
private List<TagPhoto> tagPhotoList;
}
(он был автоматически сгенерирован Netbeans при создании проекта)
РЕДАКТИРОВАТЬ: Означает ли это, что tagPhoto != tagPhoto.getTag().getTagPhotoList().get(...) != tagPhoto.getPhoto().getTagPhotoList().get(...)
?
и как мне их удалить? iterator.remove
не должен быть бесполезным, и я думаю, что три em.remove()
будут делать три раза одну и ту же операцию ...