1

我有以下代码导致java.lang.NullPointerException

List results = em.createNamedQuery("User.findByUserName").setParameter("userName", username).getResultList();

User 是实体 bean,它包含:

@NamedQuery(name = "User.findByUserName", query = "SELECT u FROM User u WHERE u.userName = :userName"),

有谁知道为什么?

4

3 回答 3

1

一个方法getResultList()不会抛出NullPointerException(如果没有匹配,它会返回空列表),所以我猜它应该是以下之一:

  • 你没有注入/初始化EntityManager em(你忘记 @PersistenceContext注释了吗?)
  • 字符串username为空

如果 EntityManager 为 null,请检查您是否有 persistence.xml 文件(这是强制性的!)。它应该看起来像:

<persistence version="2.0" 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_2_0.xsd">
  <persistence-unit name="OEMSPU" transaction-type="JTA">
    <provider>oracle.toplink.essentials.PersistenceProvider</provider>
    <jta-data-source>ADD JNDI NAME OF YOUR DATASOURCE, e.g. jdbc/sample</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties/>
  </persistence-unit>
</persistence>
于 2012-10-15T07:28:10.830 回答
0

尝试通过在公共类上方添加 @Stateless 注释使其成为无状态 Bean。为我工作。

于 2013-06-20T09:10:27.823 回答
0

当您的 psql 引用实体属性名称时,可能会出现这种情况。我在我的 psql 中做类似的事情:param.user = x.user,但是试图从参数中获取属性“用户”(在 createQuery 运行时尚未传入)给了我 NPE。我希望这种事情是可能的,虽然..

于 2015-12-09T21:31:19.167 回答