【问题标题】:Hibernate 5 Deleting Entity By Id Not Working ReliablyHibernate 5按ID删除实体不可靠
【发布时间】:2021-12-27 19:00:01
【问题描述】:

我目前正在处理使用 Jersey 3.0.3 制作的 REST API 的删除操作。 我使用 Hibernate 5.6.2 并且是 Hibernate 的新手,但经过一些研究、反复试验后,我解决了以下问题的代码:尝试通过 id 删除对象时(对象包含只有 String、int、long 和 enum 值作为属性)删除执行没有错误,但不能可靠地工作。通常,当尝试删除最近添加的对象时,必须执行两次删除才能正常工作。 在所有其他情况下,删除都可以正常工作。

我尝试了不同的方法来删除对象(例如 session.remove(obj)session.delete(obj) 并尝试使用查询进行删除),但每种方法都会导致相同的意外行为。

我做错了什么?

保存CustomObject obj的代码:

Session session = sessionFactory.openSession();
session.beginTransaction();
Serializable s = session.save(obj);
session.getTransaction().commit();
session.close();

按id删除CustomObject obj的代码:

Session session = sessionFactory.openSession();
session.beginTransaction();
CustomObject obj = session.get(CustomObject.class, id);
session.getTransaction().commit();

session.beginTransaction();
if (obj != null) {
     session.delete(obj);
}
session.getTransaction().commit();
session.close();

【问题讨论】:

  • 您的删除代码在创建提交之前运行了吗?
  • @HanchenJiang 我不确定我是否理解正确:不,对象是在删除之前创建并保存的,就像上面的代码一样。删除是稍后完成的。创建会话提交事务并关闭,只有在删除会话打开、提交事务并关闭之后。
  • 如何检查对象没有被删除?
  • @o_nvk 我用 MySQLWorkbench 看到了

标签: java database hibernate jersey


【解决方案1】:

我不太清楚为什么会修复它,但我将保存对象的代码从 session.save(obj) 更改为 session.saveOrUpdate(obj),现在一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-22
    • 2021-04-06
    • 2015-05-06
    • 1970-01-01
    • 2020-01-26
    • 2018-12-04
    • 1970-01-01
    • 2018-06-28
    相关资源
    最近更新 更多