#eclipselink #orphaned-objects
#eclipselink #потерянные объекты
Вопрос:
Я не могу заставить 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 и все их комбинации, которые, как можно было бы подумать, не окажут влияния, и это не так.
обратная сторона:
@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);
}
Комментарии:
1. Можете ли вы показать код, используемый для чтения в родительском файле, внести изменения и сохранить его?
2. Конечно, я добавил дополнительный код выше
Ответ №1:
Является ли родительская часть идентификатора объекта?
Попробуйте не устанавливать родительское значение null, вы не должны этого делать для объектов, принадлежащих частным лицам, просто удалите их из коллекции.
Комментарии:
1. Спасибо за ваш ответ. К сожалению, это не сработало. Есть еще идеи? Я не уверен, что вы подразумеваете под «Является родительской частью идентификатора объекта» Частная сущность использует стратегию идентификации для идентификатора. @GeneratedValue(стратегия=GenerationType. ИДЕНТИФИКАТОР)