3 回答
TA贡献1790条经验 获得超9个赞
我不是 100% 确定这一点。在执行搜索之前尝试关闭当前会话并打开另一个会话。
session.close();
session = sessionFactory.openSession();
这应该清除之前创建的(延迟初始化的)实体。
TA贡献1848条经验 获得超10个赞
尝试加载要删除的实例并将其删除。
private boolean deleteById(Class<?> type, Serializable id) {
Object persistentInstance = session.load(type, id);
if (persistentInstance != null) {
session.delete(persistentInstance);
return true;
}
return false;
}
boolean result = deleteById(Product.class, new Long(41));
TA贡献1795条经验 获得超7个赞
首先,在查询新实体之前,您需要检查旧实体是否存在。您可以直接尝试将实体传递给 session.delete(),以删除该对象。如果在数据库中没有找到需要处理的记录,应该有一个异常。事实上,我们通常不会真正了解这种情况。我们总是删除一个现有的实体,我的意思是通常的逻辑是这样的;所以,如果已经完成,则无需这样做。你可以简单地这样做,
Entity1 ent = session.load(Entity1.class, '1234');
session.delete(ent);
或者你可以这样做,
Entity1 ent = new Entity1('1234'); // used constructor for brevity
session.delete(ent);
顺便说一句,你也可以使用这个版本的 session.delete(String query),
session.delete("from Entity1 e where e.id = '1234'"); // Just found it is deprecated
添加回答
举报