hibernate中删除查询的executeUpdate是否也从会话中删除该对象

hibernate中删除查询的executeUpdate是否也从会话中删除该对象,hibernate,Hibernate,我正在使用删除对象 session.createQuery("delete Sample sample where sampleId = :sampleId") .setInteger(sampleId,1).executeUpdate(); 这给了我作为1删除的行数,这是正确的。 但当我使用对象的id从会话中获取该对象时,它会给我一个非空值 因此,使用session.delete()删除对象与上述查询不同 Session.delete(…)仅当您已经有了要删除的实体的引用时才有用 delet

我正在使用删除对象

session.createQuery("delete Sample sample where sampleId = :sampleId")
.setInteger(sampleId,1).executeUpdate();
这给了我作为
1
删除的行数,这是正确的。 但当我使用对象的id从会话中获取该对象时,它会给我一个非空值

因此,使用
session.delete()
删除对象与上述查询不同

Session.delete(…)
仅当您已经有了要删除的实体的引用时才有用

delete by query
用于根据特定条件删除多个对象,这些对象可能是您以前没有加载到会话中的对象

我认为deletebyquery实际上将每个实体加载到会话中,并分别删除它们

这意味着,若执行查询,hibernate将把该对象加载到会话中,然后在
executeUpdate()之后将其从DB中删除
如果不刷新
会话
并尝试
获取
对象,它将返回非空值。其中as
session.delete()
将删除它并刷新会话(如果
FlushMode
处于自动状态)。在这两种情况下,DB将在事务提交后得到反映

但如果您通过保持
showsql
为true来观察控制台,那么在
delete()
上,您会发现它将首先执行
select
,然后执行
delete
如果该对象存在于数据库中,如果该对象不存在于数据库中,则在
select
上执行


Read More@

在您提交事务之前,不会从数据库中删除记录。我已提交事务,但它仍在会话中。answer?会话上的任何更新。delete()根据hibernate对象状态(即暂时、持久和分离)运行。感谢您的详细解释。session.flush()实际上起到了帮助作用。我理解您的意思,但根据StackOverflow standers的说法,“请不要对您的问题或答案添加评论以表示“谢谢”。“标记为答案将能够理解;),阅读更多@