java - Hibernate:如何在Hibernate中删除多行?

标签 java hibernate

我尝试使用Hibernate从数据库中删除多行。已成功完成。

当我刷新 .jsp 页面时,删除的项目将再次显示。

这是我的代码:

public int deleteUserById(String id[])
{
  SessionFactory sf = HibernateUtil.getSessionFactory();

  int flag = 0;

  User user;
  try
  {

    for (int i = 0; i < id.length; i++)
    {
      Session session = sf.openSession();
      session.beginTransaction();

      Long Id = Long.parseLong(id[i]);

      user = new UserRepository().getUserByID(Id);

      session.delete(user);
      session.getTransaction().commit();
      session.close();

    }
    flag = 1;
  }
  catch (Exception e)
  {
    System.out.println("Error in deleteUserById=" + e);
  }
  return flag;
}

其他方法:

public User getUserByID(Long Id)
{
  SessionFactory sf = HibernateUtil.getSessionFactory();
  Session session = sf.openSession();
  session.beginTransaction();

  User user = null;

  try
  {
    user = (User) session.createQuery("from User where Id='" + Id + "'").list().get(0);
  }
  catch (Exception e)
  {
    System.out.println("Error in getUserByID=" + e);
  }

  session.close();
  return user;
}

获取用户方法:

public ArrayList<User> getAllUser()
{
  ArrayList<User> list_user = new ArrayList<User>();

  SessionFactory sf = HibernateUtil.getSessionFactory();

  Session session = sf.openSession();
  session.beginTransaction();

  try
  {
    list_user = (ArrayList<User>) session.createQuery("from User").list();
  }
  catch (Exception e)
  {
    System.out.println("Error in getAllUser=" + e);
  }

  session.close();
  return list_user;
}

我使用了session.clear(),但这并不能解决问题。

想法?

最佳答案

您在 getUserByID 中获取的用户在其自己的 session 中进行查询,该 session 已关闭并且返回的用户已分离。每个请求应该有一个 session ,但您有嵌套 session 。

尝试在请求开始时打开 session 和事务 并在最后提交事务并最终关闭 session 。

如果您确实想使用它自己的 session 进行查询,那么您必须合并分离的结果:

   user = session.merge(new UserRepository().getUserByID(Id));

注意:您在“deleteUserById”的 for 循环中使用了许多 session 和事务...这将相当消耗资源...最好打开 session 和事务那个循环。

关于java - Hibernate:如何在Hibernate中删除多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30885088/

相关文章:

java - 读取类的 jar 版本

java - 基于事务的缓存驱逐

java - Restdoc 在尝试记录子对象时抛出 org.springframework.restdocs.snippet.SnippetException

java - Spring @Transactional 和 Hibernate @LockMode 注释如何相关

MySQL - 获取给定列值列表的最新记录

java - HTTP 状态 500 - javax.servlet.ServletException : java. lang.NoClassDefFoundError: org/hibernate/Session

java - 生成的 Javadoc 与 NetBeans 弹出窗口显示的不同

java - 如何多次提取标签内容?

java - 如何使用 JPA 将大型 Blob 从数据库流式传输到应用程序?

java - org.hibernate.hql.internal.ast.QuerySyntaxException : table is not mapped [from table]