Spring обратный вызов, когда Entity выходит из контекста @Transactional?

Есть ли в Spring какие-либо хуки для вызова метода сущности или прослушивателя сущности для каждой сущности при выходе из транзакционного контекста?

Мы используем Spring и Hibernate для управления набором сущностей, которые мы также индексируем для поиска. В настоящее время мы используем прослушиватель сущностей с методом Hibernate @PreUpdate для выполнения переиндексации при создании или изменении сущности. Конечно, это событие срабатывает только при обновлении одного или нескольких собственных свойств сущности (т. е. значений в ее строке базы данных).

Проблема возникает, когда сущность имеет сопоставление @OneToMany для нетривиальных дочерних свойств. Когда одно из этих дочерних свойств обновляется, обратный вызов PreUpdate не вызывается для родительского объекта.

Мы уже отслеживаем, когда обновляются свойства, но мы хотим дождаться завершения всех обновлений, прежде чем запускать переиндексацию. В какое место лучше всего поместить такой вызов переиндексации? PreUpdate хорошо работает в большинстве случаев, но эта проблема заставила меня задуматься о том, есть ли какая-то ловушка, когда объект покидает область @Transactional. В качестве альтернативы, есть ли способ Hibernate вызвать обратный вызов для родителя, когда сохраняется дочерний элемент OneToMany?


person Brandon    schedule 12.07.2012    source источник


Ответы (1)


Я думаю, что аспект для спасения. см. раздел 10.5.8 Рекомендация по транзакционным операциям Рекомендации по транзакционным операциям в весенней документации это поможет вам написать аспект вокруг метода @Transactional, а затем вы выполните индексирование.

person Jigar Parekh    schedule 13.07.2012