Я пытаюсь отследить изменения в ассоциациях JPA OneToMany, чтобы уведомить подписчиков о событиях об изменении региона (одной из этих ассоциаций) объекта. Сначала я попытался получить специализацию List, которая знает об изменениях.
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "col_name")
private List<SomeType> oneOfManyLists = new CAArrayList<SomeType>();
Мой декоратор выглядит так:
public class CAArrayList<T> extends ArrayList<T> {
private boolean changed = false;
public CAArrayList() {
super();
}
public boolean isChanged() {
return changed;
}
// Mutable delegates
@Override
public boolean add( T e) {
changed = true;
return super.add( e );
}
....
}
В DAO я хочу проверить, какие из ассоциаций OneToMany были изменены,
К сожалению, следующая строка приводит к исключению ClassCastException, поскольку Hibernate оборачивает мой CAArrayList в этот объект с PersistentBag:
((CAArrayList) obj.getSomeList()).isDirty()
Следующий работает, но не переносим между различными реализациями JPA.
((PersistentBag) obj.getSomeList()).isDirty()
Как это сделать портативным способом?