有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

servlet中的Java持久化API

我正在从数据库创建一个实体类,我想从servlet中创建一个实体。我编写了以下代码:

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/>

当没有显示错误时,此操作不起作用。你知道怎么回事吗?多谢各位


共 (1) 个答案

  1. # 1 楼答案

    此代码缺少类似

    首先,您使用了错误的持久性单元名称。用这个

    EntityManagerFactory emFactory=持久性。CreateEntityManager工厂(“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();
    

    希望这能奏效