EclipseLink не удаляет частный элемент «один ко многим»

#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. ИДЕНТИФИКАТОР)