我在使用@PersistenceUnit注入包含我的DAO的第三方jar库中的EntityManagerFactory时出现问题。
这是我的多模块maven项目结构。
-EAR
\-WAR ==> the webapp (maven type war)
\-EJB ==> the service facade (maven type EJB (provided to War)
\CORE ==> the legacy DAO's library (maven type JAR)
我使用CDI连接在一起==>所有maven项目中都有一个beans.xml文件...... CDI工作正常。
但是当我把它放在CORE项目中时,@ PersistenceUnit注释不起作用。 (该字段为空)
当我在EJB项目中使用@PersistenceUnit时,一切正常。
我的persistence.xml文件位于EJB项目的META-INF文件夹下(但我试图把它放在核心项目中......没有成功)。
这是注入点:
public class HibernateSupport {
@PersistenceUnit
private EntityManagerFactory emf;
...
}
这个类在带有CDI的EJB项目中注入(它可以工作......但emf字段为空...)
有人可以帮助我吗?
编辑:
如果我将我的核心项目变成EJB项目(maven类型ejb)。然后它工作......但我希望我的核心项目保持POJO项目......
编辑2 :
生产者代码:
@PersistenceUnit
private EntityManagerFactory emf;
@Produces
public SessionFactory getSessionFactory() {
return ((HibernateEntityManagerFactory)emf).getSessionFactory();
}
答案 0 :(得分:1)
使用注释@PersistenceUnit
,您只能注入EJB。您的HibernateSupport
不是EJB。
因此,为了解决问题,您需要:
HibernateSupport
成为EJB; 或
EntityManager
注入@Inject
,阅读here如何操作; 答案 1 :(得分:0)
尝试以这种方式更改代码段:
public class HibernateSupport {
@PersistenceUnit
private EntityManager em;
...
}