Java 休眠:删除后选择第一次查找已删除对象

Java 休眠:删除后选择第一次查找已删除对象,java,hibernate,Java,Hibernate,标记是一个实体,我使用以下方法删除标记: public static <T> boolean deleteById(Class<? extends BaseEntity> clazz, Long id) { Session session = HibernateUtil.getSessionFactory().openSession(); try { session.beginTransaction();

标记是一个实体,我使用以下方法删除标记:

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;
}
接下来,我用这个方法再次阅读带有标签的列表:

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时,通过单击链接,对象被删除,我得到了正确的列表。 有人知道原因吗?

尝试添加刷新并使用提交,如下所示:

  ...
  session.delete(e);
  session.flush();
  session.beginTransaction().commit();
  ...
有关更多信息,请转到

尝试添加刷新并使用提交,如下所示:

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

要了解更多信息,请转到

我在从MySQL迁移到MariaDB时遇到了与Hibernate类似的问题,多个事务处于打开状态而未关闭状态


解决方案是删除打开的事务,因为它们无论如何都不是必需的….

当从MySQL迁移到MariaDB时,我在Hibernate上遇到了类似的问题,多个事务正在打开而没有关闭


解决方案是删除交易的期初,因为它们无论如何都不是必需的….

请为我澄清一点-当您看到删除的项目仍在列表中时,这是什么时候?是在重新查询之后,还是在中断,或者其他什么。这将有助于了解发生了什么。在删除后添加session.flush如何?Abdelhak解决了这个问题@jr593首先我删除,然后打开一个新会话,并使用HQL:FROM标记读取整个标记列表tag@jpkrohling我试过了,没用。区别在于getTransaction和beginTransaction方法。请为我澄清一点-当您看到列表中仍有已删除的项目时,这是什么时候?是在重新查询之后,还是在中断,或者其他什么。这将有助于了解发生了什么。在删除后添加session.flush如何?Abdelhak解决了这个问题@jr593首先我删除,然后打开一个新会话,并使用HQL:FROM标记读取整个标记列表tag@jpkrohling我试过了,没用。区别在于getTransaction和beginTransaction方法;成功了。为什么这样做有效而没有得到交易?@JackFlamp查看上面的链接谢谢,session.beginTransaction.commit;成功了。为什么这样做有效而没有得到交易?@JackFlamp查看上面的链接