2016-01-24 71 views
0

我做了一個REST服務項目,我通過DriverManager.getConnection(url,user,pass)執行CRUD操作。與entitymanager的基本CRUD操作

現在我的分配更改爲在Jboss 7.1.1中定義連接並且正在工作(測試Jboss管理控制檯中的數據源返回正值,並且sqljdbc驅動程序在MS SQL Server Management Studio的活動監視器中也顯示爲活動狀態) 。

我被要求使用EntityManager來運行我用於舊項目的本地查詢,而不生成實體或使用實體編寫查詢(即爲下一次分配)。

我從我在我的研究發現,寫了一個小的測試代碼,如下:

public class Test { 

@PersistenceContext(unitName="InternshipIS") protected EntityManager entityManager; 
public void getQuerys(){ 

    String sqlQuery = "SELECT * from InternshipIS.dbo.Employee"; 
    Query q = entityManager.createNativeQuery(sqlQuery); 
    System.out.println(q.getResultList().get(2)); 
} 

當到達下面的行,它拋出一個NullPointerException異常。

Query q = entityManager.createNativeQuery(sqlQuery); 

請讓我知道在那裏我搞砸了,如果需要,以便將它們添加到我的帖子全堆棧跟蹤/ persistence.xml中/ standalone.xml或其他任何東西。 PS:這不是maven項目。這是一個動態Web項目,當這次調整開始時,我轉換爲JPA。

+1

的EntityManager爲空?任何人在獲得NPE時應該做的第一件事是驗證哪些變量爲空。然後在這個網站上尋找許多關於沒有正確注入PersistenceContext的人的其他許多帖子,通常是容器配置。 –

回答

0

我固定通過作如下調整的問題:

public class Test { 
public void getQuerys(){ 
    EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("InternshipIS"); 
    EntityManager em = emFactory.createEntityManager(); 
    String sqlQuery = "SELECT * FROM Employee"; 
    Query q = em.createNativeQuery(sqlQuery); 
} 
} 
-1
String sqlQuery = "SELECT * from InternshipIS.dbo.Employee"; 

在這個查詢中,Select * from InternshipIS對sql來說是可以理解的。 但我想你是連接數據庫名稱與查詢中的表。哪個不工作,查詢返回空值。

+0

它有NPE,因爲entityManager爲空,與查詢無關 –

+0

我已經修改查詢爲:'SELECT * FROM Employee',因爲數據源已經指向數據庫但結果相同。 @NeilStockton如果這是問題(我想它是),我該如何解決它? – IvanSt