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中删除
如果不刷新会话
并尝试获取
对象,它将返回非空值。其中assession.delete()
将删除它并刷新会话(如果FlushMode
处于自动状态)。在这两种情况下,DB将在事务提交后得到反映
但如果您通过保持showsql
为true来观察控制台,那么在delete()
上,您会发现它将首先执行select
,然后执行delete
如果该对象存在于数据库中,如果该对象不存在于数据库中,则在select
上执行
Read More@在您提交事务之前,不会从数据库中删除记录。我已提交事务,但它仍在会话中。answer?会话上的任何更新。delete()根据hibernate对象状态(即暂时、持久和分离)运行。感谢您的详细解释。session.flush()实际上起到了帮助作用。我理解您的意思,但根据StackOverflow standers的说法,“请不要对您的问题或答案添加评论以表示“谢谢”。“标记为答案将能够理解;),阅读更多@