Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在事务中通过hibernate删除后,仍然可以选择实体_Java_Spring_Hibernate_Transactions - Fatal编程技术网

Java 在事务中通过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

我有一个通过hibernate删除记录的方法。我在删除后添加一个查询。删除的记录仍在结果列表中。不应该这样。这是代码

@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
。它不起作用。我不知道这是不是正确的钥匙。