Hibernate 5 通过 Id 删除实体不可靠
Hibernate 5 Deleting Entity By Id Not Working Reliably
我目前正在处理使用 Jersey 3.0.3 制作的 REST API 的删除操作。
我使用 Hibernate 5.6.2 并且是 Hibernate 的新手,但经过一些研究、反复试验后,我确定了下面的代码并遇到以下问题:当尝试按 id 删除对象时(该对象仅包含 String、int、long 和枚举值作为属性)删除执行时没有错误,但不能可靠地工作。通常,当尝试删除最近添加的对象时,删除操作必须恰好执行两次才能起作用。
在所有其他情况下,删除工作正常。
我尝试了多种删除对象的方法(例如 session.remove(obj)
、session.delete(obj)
,也尝试过使用查询进行删除),但每种方法都会导致相同的意外行为。
我做错了什么?
保存CustomObject对象的代码:
Session session = sessionFactory.openSession();
session.beginTransaction();
Serializable s = session.save(obj);
session.getTransaction().commit();
session.close();
通过id删除CustomObject对象的代码:
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();
我不太清楚为什么会修复它,但我将保存对象的代码从 session.save(obj)
更改为 session.saveOrUpdate(obj)
,现在一切正常。
我目前正在处理使用 Jersey 3.0.3 制作的 REST API 的删除操作。 我使用 Hibernate 5.6.2 并且是 Hibernate 的新手,但经过一些研究、反复试验后,我确定了下面的代码并遇到以下问题:当尝试按 id 删除对象时(该对象仅包含 String、int、long 和枚举值作为属性)删除执行时没有错误,但不能可靠地工作。通常,当尝试删除最近添加的对象时,删除操作必须恰好执行两次才能起作用。 在所有其他情况下,删除工作正常。
我尝试了多种删除对象的方法(例如 session.remove(obj)
、session.delete(obj)
,也尝试过使用查询进行删除),但每种方法都会导致相同的意外行为。
我做错了什么?
保存CustomObject对象的代码:
Session session = sessionFactory.openSession();
session.beginTransaction();
Serializable s = session.save(obj);
session.getTransaction().commit();
session.close();
通过id删除CustomObject对象的代码:
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();
我不太清楚为什么会修复它,但我将保存对象的代码从 session.save(obj)
更改为 session.saveOrUpdate(obj)
,现在一切正常。