2012-10-15 84 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。我希望這種事情是可能的,雖然..

相關問題