Я не могу заставить Eclipselink удалить частную сущность, которая отображается как отношение один-ко-многим. Когда я удаляю частную сущность из коллекции «один ко многим» и устанавливаю ссылку на ее родителя равной NULL, а затем сохраняю родительскую сущность, частная сущность не удаляется из базы данных. Однако он удаляется из объекта, и в течение оставшейся части сеанса создается впечатление, что частный объект был фактически удален.
Вот одно отображение
@OneToMany(mappedBy="parent", cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, fetch=FetchType.EAGER)
@PrivateOwned // should prevent orhpans, but doesn't.
List<PrivatelyOwnedEntity> privatelyOwnedEntities;
Я попытался добавить cascade all, а также добавил @CascadeOnDelete и каждую их комбинацию, которая, как можно было бы подумать, не окажет влияния, и это не так.
Otherside:
@ManyToOne
private Parent parent;
Я попытался добавить JoinColumn (nullable = false), а также удалить аннотацию @ManyToOne и каждую комбинацию наличия / удаления этих аннотаций. Ни одно из изменений не оказало влияния.
Код удаления:
public boolean removePrivatelyOwnedEntity(int i) {
PrivatelyOwnedEntity privatelyOwnedEntityToBeRemoved = this.privatelyOwnedEntities.get(i);
//privatelyOwnedEntityToBeRemoved.setParent(null);
return this.privatelyOwnedEntities.remove(privatelyOwnedEntityToBeRemoved );
}
Код, который обновляет:
projectManager.saveProject(project);
//so this privatelyOwnedEntity is deep within this object.
// Its project.site.siteMap.parents.privatelyOwnedEntities.
// SiteMap is embedded in Site.
// On save it calls a dao, and the dao's abstract class handles the update
// as shown below using Springs JpaTemplate
Сохранить код:
public T save(T object) {
return getJpaTemplate().merge(object);
}