我有以下代码导致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"),
有谁知道为什么?
答案 0 :(得分: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>
答案 1 :(得分:0)
通过在公共类上面添加@Stateless注释,尝试使其成为无状态Bean。为我工作。
答案 2 :(得分:0)
当您的psql引用实体属性名称时,可能会发生这种情况。我在我的psql中做了:param.user = x.user
这样的事情,但试图抓住属性&#34; user&#34;从一个参数(当createQuery运行时还没有被传入)给我NPE。我希望这种事情是可能的,但是......