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),现在一切正常。