Java 为我的EntityManager获取nullpointerexception

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")

在以下方面使用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")
    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;