【发布时间】: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