2014-01-06 89 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(); 

希望这会起作用。