Spring Dependency Injection into JPA entity listener

前端 未结 3 736
礼貌的吻别
礼貌的吻别 2020-12-10 09:33

I need to have a Spring dependency injected into a JPA entity listener. I know I can solve this using @Configurable and Spring\'s AspectJ weaver as javaagent, but this seems

3条回答
  •  悲哀的现实
    2020-12-10 10:22

    Since Hibernate 5.3 org.hibernate.resource.beans.container.spi.BeanContainer and Spring 5.1 org.springframework.orm.hibernate5.SpringBeanContainer you do not need to extra autowiring effort any more. See details of this feature in https://github.com/spring-projects/spring-framework/issues/20852

    Simply annotate your EntityListener class with @Component, and do any autowiring like so:

    @Component
    public class MyEntityListener{
    
      private MySpringBean bean;
    
      @Autowired
      public MyEntityListener(MySpringBean bean){
        this.bean = bean;
      }
    
      @PrePersist
      public void prePersist(final Object entity) {
        ...
      }
    
    }
    

    In Spring Boot the configuration of LocalContainerEntityManagerFactoryBean is done automatically in org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.

    Outside of Spring Boot, you have to register SpringBeanContainer to Hibernate:

    LocalContainerEntityManagerFactoryBean emfb = ...
     emfb.getJpaPropertyMap().put(AvailableSettings.BEAN_CONTAINER, new SpringBeanContainer(beanFactory));
    

提交回复
热议问题