Java 为我的EntityManager获取nullpointerexception
在以下方面使用Wildfly 10:JSON Web服务通过DAO对象使用hibernate访问postgresql数据库 更具体地说,my POJO User.java:Java 为我的EntityManager获取nullpointerexception,java,postgresql,hibernate,wildfly,entitymanager,Java,Postgresql,Hibernate,Wildfly,Entitymanager,在以下方面使用Wildfly 10:JSON Web服务通过DAO对象使用hibernate访问postgresql数据库 更具体地说,my POJO User.java: @Entity (name="User") @Table(name = "users") public class User { @Id @GeneratedValue @Column(name="id") private int id; @Column(name="username")
@Entity (name="User")
@Table(name = "users")
public class User {
@Id @GeneratedValue
@Column(name="id")
private int id;
@Column(name="username")
private String userName;
@Column(name="password")
private String password;
@Column(name="email")
private String emailAddress;
public User(String userName, String password, String emailAddress) {
super();
this.userName = userName;
this.password = password;
this.emailAddress = emailAddress;
}
public User() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
我的用户道:
@Stateless
public class UserDao {
@PersistenceContext (unitName="librarysoftjpa")
private EntityManager entityManager;
public List<User> getAllUsers(){
List<User> allUsers=null;
CriteriaBuilder criteriaBuilder = this.entityManager.getCriteriaBuilder();
CriteriaQuery<User> criteria = criteriaBuilder.createQuery(User.class);
criteria.from(User.class);
TypedQuery<User>query = entityManager.createQuery(criteria);
allUsers = query.getResultList();
return allUsers;
}
}
更具体地说:
Caused by: java.lang.NullPointerException
at org.declercq.librarysoftbackend.dao.UserDao.getAllUsers(UserDao.java:64)
其中指出:
CriteriaBuilder criteriaBuilder = this.entityManager.getCriteriaBuilder();
在UserDao.java中
知道我做错了什么吗
更新:此处链接的主题尽可能重复与此无关。我的问题是容器管理的持久性上下文和在应用程序中注入entitymanager,而不是不知道如何初始化对象
UpDea2:我稍微更改了我的代码,并在从Adam Bien中读取这个帖子之后,添加了注释“无状态”,将我的UserDao视为bean。基本上说,JPA不再需要DAO,EJB更好。但是,在同一位置上仍然存在nullpointerexception。(也尝试了@Stateful,结果相同)
更新3:
在Wildfly的standalone.xml中配置我的数据源:
<datasources>
<datasource jndi-name="java:/PostGreLibrarySoftDS" pool-name="PostgrePool">
<connection-url>jdbc:postgresql://127.0.0.1:5432/librarysoft</connection-url>
<driver>postgres</driver>
<security>
<user-name>test</user-name>
<password>test</password>
</security>
</datasource>
<drivers>
<driver name="postgres" module="org.postgres">
<driver-class>org.postgresql.Driver</driver-class>
</driver>
</drivers>
将bean注入
@EJB
就是解决方案。您的UserDao不受任何框架的管理。请注意,在您提供的示例中,Movies对象上有@Stateful
。这告诉您容器应该注入依赖项:PersistenceManager在您的情况下。在您的UserWebService
资源中,您正在实例化您的UserDao
,如下所示:
public UserWebService(){
this.userDao=new UserDao();
}
@EJB
private UserDao userDao;
您的UserDao
是一个@无状态的
EJB(具有本地无接口视图)
因此,让EJB容器按如下方式注入UserDao
EJB:
public UserWebService(){
this.userDao=new UserDao();
}
@EJB
private UserDao userDao;
现在可以删除UserWebService
构造函数
我希望这会有所帮助。您是否在任何地方初始化了
entityManager
?您得到的是nullpointer,因为它没有初始化否,我在任何地方都没有初始化它。我的印象是,因为它是由应用程序容器注入和管理的,所以我不需要在代码中初始化它?我在哪里/如何初始化它呢?可能是Lol的重复,是的,谢谢,但我知道什么是空指针异常,为什么会发生,以及如何修复它。我的问题是理解整个JPA/容器管理的持久性上下文和实体管理器,而不是“不知道如何初始化对象”org.declercq.librarysoftbackend.rest.UserWebService.getAllUsers(UserWebService.java:69)
Yep,我也在尝试,我的UserDao尝试了有状态和无状态,仍然相同:同一行上的nullpointerexception。您的PostgreLibrarySoftD是如何配置的?请参阅原始帖子,刚刚从Wildfly添加了my datasources配置。首先,在您当前的示例中,您使用的是无状态的,但您应该是有状态的,以便任何东西都可以工作。其次,在persistence.xml中,请尝试PostGreLibrarySoftDS,因为persistence.xml不适用于完整的JNDI名称。不,抱歉,已更改为stateful并更新了persistence.xml,仍然是相同的nullpointer异常。您确定要删除java:/too吗?检查此处的示例:
public UserWebService(){
this.userDao=new UserDao();
}
@EJB
private UserDao userDao;