Hibernate:DELETE第一次找到删除的对象后的SELECT

时间:2016-04-14 11:28:05

标签: java hibernate

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()时,通过单击链接删除对象,我得到正确的列表。 有谁知道为什么?

2 个答案:

答案 0 :(得分:0)

尝试添加flush()并使用commit(),如下所示:

  ...
  session.delete(e);
  session.flush();
  session.beginTransaction().commit();
  ...

有关详细信息,请转到session.getTransaction() vs session.beginTransaction()

答案 1 :(得分:0)

从MySQL迁移到MariaDB时,我遇到了类似的Hibernate问题,因为有多个事务处于打开状态,而没有关闭...

解决方案是取消交易的开始,因为无论如何都不需要它们。...