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查看上面的链接