簡體   English   中英

Hibernate:如何在Hibernate中刪除多行?

[英]Hibernate:How to delete multiple rows in 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中獲取的用戶,該會話已關閉,並且返回的用戶已分離。 每個請求應該有一個會話,但是您有嵌套的會話。

嘗試在請求的開頭打開會話和事務,並在結尾處提交事務,最后關閉會話。

如果您真的想使用它自己的會話進行查詢,則必須合並分離的結果:

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

注意:您正在for循環中的“ deleteUserById”中使用許多會話和事務……這將是相當耗資源的……最好圍繞該循環打開會話和事務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM