移除

时间:2016-06-15 15:57:01

标签: jpa sql-delete

我正在尝试编写显示数据库中用户的jsp网页。该页面正在正确运行。

例如,可以通过单击页面上的链接从数据库中删除用户,但不幸的是,用户仍然会在下一次加载页面时显示。重新加载页面后,用户就不见了。我在JPA课程中添加了@Cacheable(false),但没有任何改变。

为了更好地理解示例工作流程:

  1. 管理员点击Usermanagement(调用“showUserHandler”servlet)
  2. 页面正在加载数据库中的前10个用户
  3. 管理员删除用户(通过调用处理程序(MVC)/ servlet)
  4. Servlet删除用户并从点号1
  5. 调用showUserHandler
  6. 正在加载页面,显示10个用户,但已删除的用户仍然在那里
  7. 按F5或“重新加载”,用户不见了
  8. 用户被移除,如:

    Users user = em.find(Users.class, request.getParameter("uId"));
    if (user != null) {
    em.getTransaction().begin();
    em.remove(user);
    em.getTransaction().commit();
    em.close();
    }
    

    加载用户:

    EntityManager em = SessionUtil.createManager();
    List<Users> usersList = em.createNamedQuery("Users.findAllOrdered", Users.class).setParameter("uId", Integer.parseInt(request.getParameter("lastID"))).setFirstResult(0).setMaxResults(10).getResultList();
    

    有人能告诉我什么是错的吗?

1 个答案:

答案 0 :(得分:0)

我认为当您删除实体时,您的代码会抛出java.lang.IllegalArgumentException: Removing a detached instance,并在您的事务中进行回滚。这是因为您在不同的持久化上下文中加载和删除此实体。

您是否尝试过调用交易中的find

em.getTransaction().begin();
Users user = em.find(Users.class, request.getParameter("uId"));
if (user != null) {
em.remove(user);
em.getTransaction().commit();
em.close();
}