У меня есть проект Hibernate с лицом, имеющей аналогичное отношением к следующему:Пинающе событие после того, как несколько объектов обновляются в Hibernate транзакции
Car {
String name;
Engine engine;
}
Engine {
String name;
}
У нас есть внешняя система (веб-службы, черный ящик), который должна быть обновлена с изменениями, внесенными в указанных выше лиц, однако, внешняя система не делает различий между Car
и Engine
:
RemoteCar {
String name;
String engineName;
}
процесс синхронизации включает в себя получение экземпляра RemoteCar
из удаленной системы, обновив значения, измененные с Car
и Engine
, а затем отправив запрос на обновление.
Я пытаюсь использовать PostUpdateEventListener
с requiresPostCommitHanding
возвращения true
стартует событие приложения для обновления внешней системы, но если оба «имя s и Engine
» Car
имя s обновляются в одной и той же операции, я получаю два события, начиная с двух синхронизаций с внешней системой.
Есть ли способ гарантировать, что я получаю только те события, которые мне нужны? К сожалению, некоторые обновления до Engine
выполняются напрямую (EngineDao.get(1).setName()
), что означает, что Car
никогда не задействован - я могу легко выполнить свой путь обратно в дерево, чтобы получить свой экземпляр Car
, но я не вижу, как определить, обновляется ли до Engine
является частью большого обновления Car
или автономного обновления Engine
.
Спасибо за это. Как вы будете управлять своим кешем? Могу ли я использовать карту со значением PostUpdateEvent.getSession(). GetTransaction() как ключ в IdentityHashMap? (с правильной синхронизацией) – Rich
Да, это именно то, что я делаю при управлении кешем процесса аудита, связанным с сеансом спящего режима в Envers. – Naros