[英]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.