eventlisteners using hibernate 4.0 with spring 3.1.0.release?

后端 未结 4 977
没有蜡笔的小新
没有蜡笔的小新 2020-11-27 05:00

These jars are both new released and have the latest solutions for Java EE applications. But I have a problem on specifiying hibernate listeners in hibernate.cfg.xml.

4条回答
  •  旧时难觅i
    2020-11-27 05:35

    The new approach is to use an Integrator to register the event listeners. Hibernate will now use service discovery for registering event listeners and here is how I got it to work using a maven archetype-webapp

    create a file under META-INF/services (which should reside under your resources directory) called org.hibernate.integrator.spi.Integrator with all classes that implement the hibernate spi Interface, one line each. Short example below:

    ...

    META-INF/services/org.hibernate.integrator.spi.Integrator

    com.example.CustomIntegrator
    

    com.example.CustomIntegrator

    package com.example;
    
    import ...;
    
    public void CustomIntegrator implements Integrator {
    
        static final Logger logger = LoggerFactory.getLogger(CustomIntegrator.class);
    
        @Override
        public void integrate(Configuration configuration, SessionFactoryImplementor implementor, SessionFactoryServiceRegistry registry) {
            final EventListenerRegistry eventRegistry = registry.getService(EventListenerRegistry.class);
    
            logger.info("Registering event listeners");
            // you can add duplication strategory for duplicate registrations
            ...
    
            // prepend to register before or append to register after
            // this example will register a persist event listener
            eventRegistry.prependListeners(EventType.PERSIST, myListener);
            ...
        }
    
        ...
    
    }
    

    com.example.MyListener

    package com.example;
    
    import ...
    
    public class MyListener implements PersistEventListener {
    
        static final Logger logger = LoggerFactory.getLogger(MyListener.class);
    
        public void onPersist(PersistEvent event) throws HibernateException {
            logger.debug("Entering MyListener");
    
            if(event.getObject() instanceof MyPersistableEntity) {
                MyPersistableEntity entity = (MyPersistableEntity) event.getObject();
                // do something with entity
                ...
            }
        }
    
        ...
    }
    

    Any entity that needs to have this event registered to it must implement MyPersistableEntity (not shown here)

提交回复
热议问题