显示java.lang.NullPointerException在CreateNamedQuery(

2019-10-17 07:59发布

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

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

用户是实体bean,其中包含:

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

有谁知道为什么吗?

Answer 1:

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

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

在EntityManager的空的情况下,检查是否有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>


Answer 2:

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



Answer 3:

这可以来了解当你在psql引用实体属性的名称。 我在做类似的东西:param.user = x.user在我的psql,而是试图抓住从参数(尚未在运行的createQuery时尚未获得通过)属性“用户”是给我的NPE。 我希望这样的事情是可能的,但..



文章来源: java.lang.NullPointerException in CreateNamedQuery