2012-10-15 83 views
1

我有下面的代码这是导致java.lang.NullPointerException显示java.lang.NullPointerException在CreateNamedQuery

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

有谁知道为什么吗?

+0

告诉我们的例外stacktrace! –

+0

我没有收到异常的堆栈跟踪。该网页保持在同一页面中。 – Shilpa

+0

您应该在某处获取堆栈跟踪*,例如在服务器日志中。除非你手动捕获异常,并且不使用'e.printStackTrace()'。在这种情况下,你应该解决这个问题 –

回答

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> 
+0

我有@PersistenceContext(unitName =“OEMSPU”)。字符串用户名不是空的,因为我打印出来检查。 – Shilpa

+1

在调用命名查询之前,请检查您的代码是否为'em'。 –

+0

是的,em是空的。我现在该怎么办? – Shilpa

0

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

0

当您的psql引用实体属性名称时,可能会出现这种情况。我在psql中做了一些像:param.user = x.user这样的操作,但是试图从param(当createQuery运行时还没有传入)中获取属性“user”给了我NPE。我希望这种事情是可能的,虽然..

相关问题