Как настроить "hibernate.integrator_provider" с помощью Springboot 1.5.x - PullRequest
1 голос
/ 10 апреля 2019

Я использую springboot 1.5.x и пытаюсь реализовать прослушиватель событий, следуя этому руководству.

Я столкнулся с блокировщиком, который не может установить интегратор hibernate с SpringBoot 1.5.x。 Я попытался настроить интегратор в properties.yml, как показано в приведенном ниже коде, но он выдал исключение, которое не может привести строку к интегратору:

spring:
  jpa:
    properties:
      hibernate.integrator_provider: com.lenovo.sci.smartbms.events.RootAwareEventListenerIntegrator

Здесь - этосвязанный с этим вопрос, но предоставленное решение не работает для springBoot 1.5.x.

1 Ответ

2 голосов
/ 12 апреля 2019

Я нашел решение, которое можно использовать с здесь .Он не использует интегратор, но добавляет всех слушателей событий один за другим.Ниже мой код:

public class RootAwareInsertEventListener implements PersistEventListener {

    public static final RootAwareInsertEventListener INSTANCE = new RootAwareInsertEventListener();

    @Override
    public void onPersist(PersistEvent event) throws HibernateException {
        final Object entity = event.getObject();

        if (entity instanceof RootAware) {
            RootAware rootAware = (RootAware) entity;
            Object root = rootAware.getRoot();
            event.getSession().lock(root, LockMode.OPTIMISTIC_FORCE_INCREMENT);

            log.info("Incrementing {} entity version because a {} child entity has been inserted",
                    root, entity);
        }
    }

    @Override
    public void onPersist(PersistEvent event, Map createdAlready)
            throws HibernateException {
        onPersist(event);
    }
}
@Component
public class HibernateListenerConfigurer {

    @PersistenceUnit
    private EntityManagerFactory emf;

    @PostConstruct
    protected void init() {
        SessionFactoryImpl sessionFactory = emf.unwrap(SessionFactoryImpl.class);
        EventListenerRegistry registry = sessionFactory.getServiceRegistry().getService(EventListenerRegistry.class);
        registry.getEventListenerGroup(EventType.PERSIST).appendListener(RootAwareInsertEventListener.INSTANCE);
        registry.getEventListenerGroup(EventType.FLUSH_ENTITY).appendListener(RootAwareUpdateAndDeleteEventListener.INSTANCE);

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...