Gui*_*oMB 4 java spring hibernate dependency-injection jpa
我需要创建一个必须有权访问实体管理器的 Hibernate 拦截器。问题是,当我定义如何使用 Spring 中的 XML 配置文件创建 EntityManagerFactory 以定义 entityManagerFactory bean 时,我必须告诉实体管理它必须使用哪个拦截器 bean。问题是我的拦截器 bean 具有使用定义的注入实体管理器字段
@PersistenceContext private EntityManager entityManager;
Run Code Online (Sandbox Code Playgroud)
当我这样做时,Spring 会引发以下异常:
引起:org.springframework.beans.factory.BeanCreationException:创建名为“ar.com.zauber.commons.repository.utils.ConfigurableHibernatePersistence#50d17ec3”的bean时出错,定义在类路径资源[ar/com/xxx/impl/config /persistence/persistence-impl-xxx-spring.xml]:在设置 bean 属性“拦截器”时无法解析对 bean“拦截器”的引用;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“拦截器”的 bean 时出错:持久依赖注入失败;嵌套异常是 org.springframework.beans.factory.BeanCurrentlyInCreationException:创建名为“entityManagerFactory”的 bean 时出错:当前正在创建的 FactoryBean 从 getObject 返回 null
问题是无法注入实体管理器,因为正在创建实体管理器工厂。
知道如何解决这个问题吗?
使用依赖(XML 版本):
<bean id="interceptor"
class="YourHibernateInterceptor" depends-on="entityManagerFactory"/>
Run Code Online (Sandbox Code Playgroud)
或@DependsOn(注解版):
@DependsOn("entityManagerFactory")
public class YourHibernateInterceptor{
// ...
}
Run Code Online (Sandbox Code Playgroud)
参考:
如果这不起作用,因为它是一个鸡/蛋问题(EntityManagerFactory 取决于 SessionFactory,SessionListener 取决于 EntityManagerFactory,您可以将您的 SessionListener 标记为ApplicationContextAware或ApplicationListener<ContextRefreshedEvent>并手动连接EntityManager:
this.entityManager = context.getBean(EntityManager.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5393 次 |
| 最近记录: |