我尝试使用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/