Java 在事务中通过hibernate删除后,仍然可以选择实体
我有一个通过hibernate删除记录的方法。我在删除后添加一个查询。删除的记录仍在结果列表中。不应该这样。这是代码Java 在事务中通过hibernate删除后,仍然可以选择实体,java,spring,hibernate,transactions,Java,Spring,Hibernate,Transactions,我有一个通过hibernate删除记录的方法。我在删除后添加一个查询。删除的记录仍在结果列表中。不应该这样。这是代码 @Transactional public void deleteFoo(long fooId){ Foo foo = fooDao.find(fooId); fooDao.delete(foor); List<Foo> brothers = fooDao.findByParentId(foo.getParentId()); // I
@Transactional
public void deleteFoo(long fooId){
Foo foo = fooDao.find(fooId);
fooDao.delete(foor);
List<Foo> brothers = fooDao.findByParentId(foo.getParentId());
// I think the brothers does not contains foo.
// Unfortunately, foo is still in the list.
// I do not know why and how to make sure the brothers does not contains foo.
...
}
@Transactional
公共void deleteFoo(长fooId){
Foo-Foo=fooDao.find(fooId);
删除(foor);
List brothers=fooDao.findByParentId(foo.getParentId());
//我想兄弟俩不含福。
//不幸的是,foo仍然在列表中。
//我不知道为什么,也不知道如何确保兄弟俩不含foo。
...
}
记录将从提交事务的数据库中删除。您应该刷新hibernate会话 通过Hibernate处理数据库时,您使用的是Hibernate会话 Hibernate会话通过以下三种情况刷新到数据库
- 提交()-提交事务时
- 在运行查询之前
- 调用session.flush()时
session.flush()
为什么它不是在findByParentId之前被刷新的delete?我指的是对数据库的查询。我在delete之后添加了
session.flush()
。但这导致了立即进行的删除。它破坏了事务配置。设置hibernate.connection.autocommit=false@sbjavateam我正在使用弹簧靴
。我测试了spring.jpa.properties.hibernate.connection.autocommit=false
。它不起作用。我不知道这是不是正确的钥匙。