В моем проекте Spring загрузки данных/JPA/Hibernate Я настроен следующее CREATE, UPDATE и DELETE слушателей:Hibernate слушателей информация + сделка
@Component
public class HibernateListenersConfigurer {
@Autowired
private EntityManagerFactory entityManagerFactory;
@Autowired
private HibernateEntityListener listener;
@PostConstruct
public void registerListeners() {
final HibernateEntityManagerFactory hibernateEntityManagerFactory = (HibernateEntityManagerFactory) this.entityManagerFactory;
final SessionFactoryImpl sessionFactoryImpl = (SessionFactoryImpl) hibernateEntityManagerFactory.getSessionFactory();
final EventListenerRegistry registry = sessionFactoryImpl.getServiceRegistry().getService(EventListenerRegistry.class);
registry.getEventListenerGroup(EventType.POST_COMMIT_INSERT).appendListener(listener);
registry.getEventListenerGroup(EventType.POST_COMMIT_UPDATE).appendListener(listener);
registry.getEventListenerGroup(EventType.POST_DELETE).appendListener(listener);
}
}
@Component
public class HibernateEntityListener implements PostCommitInsertEventListener, PostCommitUpdateEventListener, PostCommitDeleteEventListener {
@Override
public boolean requiresPostCommitHanding(EntityPersister persister) {
return true;
}
@Override
public void onPostInsert(PostInsertEvent event) {
//get transaction information(like ID) here
}
...
}
В моих методах слушателя как onPostInsert
, onPostUpdate
и т.д. Мне нужно, чтобы получить сделку информацию (например, идентификатор транзакции).
Как это сделать?
Спасибо! Можно ли избежать дополнительного запроса к базе данных? Мне нужно получить некоторые идентификаторы, чтобы упорядочить все изменения в ревизии (из той же транзакции) – alexanoid