1

我已经使用休眠集成器实现了后插入和后更新事件侦听器。听众正在按预期工作。每当触发该事件时,我都需要调用服务,因此我自动连接了该服务并且它为空。我在这里想念什么?我的集成商

public class EntityIntegrator implements Integrator {

    public static final EntityIntegrator INSTANCE = new EntityIntegrator();

    @Override
    public void integrate(Metadata metadata, SessionFactoryImplementor sessionFactory,
                          SessionFactoryServiceRegistry serviceRegistry) {

        final EventListenerRegistry eventListenerRegistry =
                serviceRegistry.getService(EventListenerRegistry.class);
        EntityEventListener listener = new EntityEventListener();

        eventListenerRegistry.appendListeners(
                EventType.POST_INSERT,
                listener
        );

        eventListenerRegistry.appendListeners(
                EventType.POST_UPDATE,
                listener
        );
    }

    @Override
    public void disintegrate(SessionFactoryImplementor sessionFactory,
                             SessionFactoryServiceRegistry serviceRegistry) {
    }
}

属性配置器类 -

@Configuration 公共类 PropertyConfigurer 实现 HibernatePropertiesCustomizer {

@Override
public void customize(Map<String, Object> hibernateProperties) {
    hibernateProperties.put("hibernate.integrator_provider",
            (IntegratorProvider) () -> Collections.singletonList(EntityIntegrator.INSTANCE));
} }

监听器实现。

@Service
public class EntityEventListener implements PostInsertEventListener, PostUpdateEventListener {

    Logger logger = LogManager.getLogger(EntityEventListener.class);

    @Autowired
    CommonService commonService ;

    /**
     * To handle any operations to be done post insert.
     */
    @Override
    public void onPostInsert(PostInsertEvent event) {

        if(event.getEntity() instanceof EntityClass)
        {
            commonservice.test((EntityClass) event.getEntity()); //commonService is null
        }
    
    }

    /**
     * To handle any operations to be done post update.
     */
    @Override
    public void onPostUpdate(PostUpdateEvent event) {
        logger.info("Inside post update event : {}" , event.getEntity().getClass().getName());
        if(event.getEntity() instanceof WalletTransaction)
        {

        }
    }

    @Override
    public boolean requiresPostCommitHanding(EntityPersister persister) {
        return false;
    }
}

如果我做错了什么,请原谅我的弹簧靴新手

4

0 回答 0