Хм, я всегда предполагал, что JPA справился с этим за кулисами, потому что ситуация в базе данных идентична, независимо от того, удаляю я / добавляю ссылки или нет на стороне, не являющейся владельцем отношения. Благодарю.

вая следующий сценарий:

@Entity
public class A {
  @OneToMany(mappedBy = "a", cascade = CascadeType.ALL)
  private List<B> bList;
}

@Entity
public class B {
  @ManyToOne()
  @JoinColumn(name = "a_id", referencedColumnName = "id")
  private A a;

  @ManyToOne()
  @JoinColumn(name = "c_id", referencedColumnName = "id")
  private C c;
}

@Entity
public class C {
  @OneToMany(mappedBy="c", cascade=CascadeType.ALL, orphanRemoval=true)
  @CascadeOnDelete // eclipselink specific optimization annotation
  private List<B> bList;
}

Другими словами: и объект A, и объект C содержат несколько объектов B.

Когда я удаляю объект C (технически я обновляю объект, содержащий несколько объектов C и использующий orphanremoval), я хочу удалить все ссылочные B-объекты, что работает, как и ожидалось, с текущими аннотациями. Однако менеджер сущностей, похоже, не понимает, что объект А, лежащий в его кэше, потерял некоторых детей. Если бы у меня был экземпляр A, мне, конечно, пришлось бы обновлять его bList вручную или делать новый запрос, чтобы обновить его, но даже вновь полученные A-объекты все еще устарели. Чтобы повторить:

С объекты удалены.Удаление каскадно к B объектам с помощью orphanRemoval.bList в объектах A, кэшированных в Entity Manager,не обновляются.Очистка кэша Entity Managers вручную позволяет получать правильно обновленные объекты.

Как это можно решить? Я ожидаю, что либо менеджеры сущностей обновят свой постоянный контекст автоматически, либо сделают каскадную аннотацию доступной на @JoinColumn, но, похоже, ни одна из них здесь не подходит.

РЕДАКТИРОВАТЬ: Кажется, что проблема заключается в том, что bList объекта C не обновляется при обновлении bList объекта A (и, следовательно, не может каскадных изменений). Хотя я понятия не имею, почему .. Тем не менее, обратите внимание, что я говорю о контексте персистентности, а не о экземплярах объектов.

Ответы на вопрос(1)

Ваш ответ на вопрос