JPA Spring注入的EntityManager为空,即使持久化单元实体已启动。

26 浏览
0 Comments

JPA Spring注入的EntityManager为空,即使持久化单元实体已启动。

我正在使用JPA和Spring将我的JBOss服务器连接到Oracle数据库。

以下是我的配置:

database.xml

数据库配置文件

persistence.xml

持久化配置文件

spring上下文正常初始化。我得到了消息:

在启动服务器时,启动持久化单元unitDS。

我还有一个抽象的JPA dao,我使用注解@persistenceContext注入我的上下文:

问题是当我尝试连接到我的数据库时,我的EntityManager始终为空。

我不明白这个问题是从哪里来的。我配置有问题吗?

我尝试了几个类似帖子的解决方案,但无法解决我的问题。

0
0 Comments

这个问题的出现的原因是没有添加,这个配置可以启用组件扫描。解决方法是添加这个配置,并将"your.package"替换为适当的包名。但是,添加这个配置后问题仍未解决。如果有其他解决方法,我会再次回复你。

0
0 Comments

在使用JPA Spring进行注入时,可能会出现EntityManager注入为null的问题,即使持久化单元实体已经启动。下面将介绍出现这个问题的原因以及解决方法。

问题原因:

问题的根源在于使用了"new"关键字创建实现类的实例。在这种情况下,Spring无法对该实例进行自动注入,因此EntityManager的值为null。

解决方法:

要解决这个问题,可以通过以下几种方法来进行实现:

1. 使用@Autowired注解:

使用@Autowired注解可以告诉Spring将EntityManager自动注入到需要的地方。例如:

   @Autowired
   private EntityManager entityManager;
   

这样就可以确保EntityManager被正确注入,并且不会为null。

2. 使用@Resource注解:

@Resource注解也可以用于注入EntityManager。例如:

   @Resource
   private EntityManager entityManager;
   

这样也可以保证EntityManager被正确注入。

3. 使用构造函数注入:

另一种方式是通过构造函数来注入EntityManager。例如:

   private EntityManager entityManager;
   
   public YourClass(EntityManager entityManager) {
       this.entityManager = entityManager;
   }
   

这样,在创建类的实例时,可以将EntityManager作为参数传递进去,从而实现注入。

在使用JPA Spring进行注入时,如果出现EntityManager为null的问题,可以通过使用@Autowired、@Resource注解或者构造函数注入的方式来解决。这样可以确保EntityManager被正确注入,并且不会为null。希望这篇文章对解决类似问题有所帮助。

0
0 Comments

原因:Spring配置中的bean名称为emf,而AbstractDao中的限定符为entityManagerFactory,因此Spring无法正确注入bean。

解决方法:将Spring配置中的bean名称改为entityManagerFactory,以与AbstractDao中的限定符匹配。

0