Tag
是一个实体,我使用此方法删除代码:
public static <T> boolean deleteById(Class<? extends BaseEntity> clazz, Long id) {
Session session = HibernateUtil.getSessionFactory().openSession();
try {
session.beginTransaction();
T e = get(clazz, id);
if (e != null) {
session.delete(e);
session.getTransaction().commit();
return true;
} else {
return false;
}
} finally {
session.close();
}
}
接下来,我使用此方法再次阅读带有标签的列表:
public static List<Tag> listTags() {
Session session = HibernateUtil.getSessionFactory().openSession();
Query q = session.createQuery("FROM Tag tag");
List<Tag> tags = (List<Tag>) q.list();
session.close();
return tags;
}
问题在于,删除并重新选择所有标签时,删除的标签位于列表中,但不在数据库中。当我第二次运行listTags()时,通过单击链接删除对象,我得到正确的列表。 有谁知道为什么?
答案 0 :(得分:0)
尝试添加flush()
并使用commit()
,如下所示:
...
session.delete(e);
session.flush();
session.beginTransaction().commit();
...
有关详细信息,请转到session.getTransaction() vs session.beginTransaction()
答案 1 :(得分:0)
从MySQL迁移到MariaDB时,我遇到了类似的Hibernate问题,因为有多个事务处于打开状态,而没有关闭...
解决方案是取消交易的开始,因为无论如何都不需要它们。...