【问题标题】:em.createQuery keeps returning nullem.createQuery 不断返回 null
【发布时间】:2012-06-23 20:27:24
【问题描述】:

我有这个应用程序,我使用 JSF 2.0 和 EclipseLink,我为 MySQL 创建的数据库创建了实体,使用 netbeans 7.1.2 创建了这些实体,它是自动创建的。

然后我使用会话 bean 来处理这些实体,问题是 em.createQuery 总是返回 null,尽管我检查了实体中的 NamedQueries 并且它们完全匹配

来自名为查询的实体的示例:-

@NamedQueries({
    @NamedQuery(name = "Users.findAll", query = "SELECT u FROM Users u"),
    @NamedQuery(name = "Users.findByUserId", query = "SELECT u FROM Users u WHERE u.userId = :userId"),
    @NamedQuery(name = "Users.findByUsername", query = "SELECT u FROM Users u WHERE u.username = :username"),
    @NamedQuery(name = "Users.findByEmail", query = "SELECT u FROM Users u WHERE u.email = :email"),

注意我如何在会话 bean 中使用这个 findByEmail 查询:-

public Users findByEmail(String email){
        em.getTransaction().begin();
        String find = "Users.findByEmail";
        Query query = em.createNamedQuery(find);
        query.setParameter("email", email);
        Users user = (Users) query.getSingleResult();

但它总是从这个 em.createNamedQuery 返回 null,我先尝试使用 .createQuery 但它也不好。

异常的堆栈跟踪

Caused by: java.lang.NullPointerException
    at com.readme.entities.sessionBeans.UsersFacade.findByEmail(UsersFacade.java:48)
    at com.readme.user.signup.SignupBean.checkAvailability(SignupBean.java:137)
    at com.readme.user.signup.SignupBean.save(SignupBean.java:146)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)

这里的问题似乎是什么?

【问题讨论】:

  • 这个问题与JSF无关。
  • 你是如何获得EntityManager的?
  • 我使用@PersistenceContext注解来获取em

标签: java jpa entitymanager


【解决方案1】:

如果 em.createNamedQuery(find) 确实是在您的情况下引发 NullPointerException 的语句,那么正在发生一些相当奇怪的事情。

当您第一次使用em 引用em.getTransaction().begin() 时,很可能会抛出NullPointerException。如果是这种情况,那么一个很常见的原因是您的实体管理器没有被注入,因为注入只在托管类中起作用(有关详细信息,请参阅this question)。如果您通过新操作创建了会话 bean,那么它是不受管理的。

其他常见原因是缺少@Persistenceontext 注释。

【讨论】:

  • 我尝试了所有方法,但它一直显示此错误,奇怪的是它在我更新数据库之前曾经工作过
猜你喜欢
  • 2012-05-11
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-14
  • 1970-01-01
  • 2021-06-08
相关资源
最近更新 更多