2014-01-06 97 views
0

我正在從數據庫創建一個實體類,並且我想從servlet中超過實體。我寫了下面的代碼:Servlets中的Java持久性API

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    try (PrintWriter out = response.getWriter()) { 

     EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("UniAppPU"); 
     EntityManager em = emFactory.createEntityManager(); 
     Query query = em.createNamedQuery("Uniuser.findByUsername"); 
     query.setParameter("Username","clayd"); 
     List<Uniuser> result = query.getResultList(); 

     out.println("<p>" + result.size() + "</p>"); 

     em.close(); 

    } 
} 

我有一個簡單的html頁面,表單動作發送到這個servlet。

<form method="post" action="processLogin"> 
     <input type="submit" value="Sign in"> 

    </form> 

,這是後:

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    processRequest(request, response); 
} 

持久xml文件如下:

<persistence-unit name="UniversityApplicationPU" transaction-type="JTA"> 
<jta-data-source>UniversityEntity</jta-data-source> 
<exclude-unlisted-classes>false</exclude-unlisted-classes> 
<properties/> 

這雖然沒有錯誤是不工作所示。你有什麼想法嗎?非常感謝你。

+2

「不工作」的定義很多。你指的是哪一個? –

+0

從數據庫中獲取數據的servlet代碼。它應該顯示錶中有多少條記錄,但沒有顯示。 – Clayton

+0

你是否吞嚥任何異常,可能是或可能是你的看法,只是隱藏該部分檢查原始html –

回答

0

此代碼是缺少像..

首先,您使用錯誤的持久單元名稱。使用這個

EntityManagerFactory emFactory = Persistence.createEntityManagerFactory(「UniversityApplicationPU」);

其次,您需要在任何獲取/更新之前啓動事務。您的實際代碼將如下所示。

EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("UniversityApplicationPU"); 
    EntityManager em = emFactory.createEntityManager(); 
    em.getTransaction.begin(); 
    Query query = em.createNamedQuery("Uniuser.findByUsername"); 
    query.setParameter("Username","clayd"); 
    List<Uniuser> result = query.getResultList(); 
    out.println("<p>" + result.size() + "</p>"); 
    em.close(); 
    emFactory.close(); 

希望這會起作用。