我正在为我的EntityManager获取NPE并且无法找出原因 - 有人能发现我的错误吗?
UserManagerImpl.java
@Stateless
public class UserManagerImpl implements UserManager {
@PersistenceContext(unitName = "persistenceUnit")
EntityManager em;
public List<User> findUsers() {
return (List<User>) em.createQuery("from User").getResultList();
}
}
META-INF / persistence.xml中
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="persistenceUnit">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/DefaultDS</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create" />
</properties>
</persistence-unit>
</persistence>
这些是在我的ejb jar项目中,从JSP调用UserManagerImpl,但不确定它是否应该有所不同。
提前致谢。
答案 0 :(得分:3)
当您使用new UserManagerImpl()
时,容器无法将EntityManager
注入此类。您需要让容器使用
@EJB
private UserManager userManager;
这仅适用于容器托管对象,如JSF托管bean,servlet或JSP。或者,您可以使用
之类的东西从jndi查找ejbnew InitialContext().lookup("UserManagerImpl");
实际的jndi名称可能不同。