Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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 Spring Hibernate在不调用Save方法的情况下保存/提交事务_Java_Spring_Hibernate - Fatal编程技术网

Java Spring Hibernate在不调用Save方法的情况下保存/提交事务

Java Spring Hibernate在不调用Save方法的情况下保存/提交事务,java,spring,hibernate,Java,Spring,Hibernate,我正在使用JPA的Spring和Hibernate实现。 在我的服务类中,我有一个如下的方法 @Override public String myMethod(String arg) throws Exception { MyObject obj = fetchFromDB(); // Some code to update object. if(isSuccess){ myObject.saveAndFlush(); } else{ return failure;

我正在使用JPA的Spring和Hibernate实现。 在我的服务类中,我有一个如下的方法

@Override
public String myMethod(String arg) throws Exception {
 MyObject obj = fetchFromDB();

 // Some code to update object.

 if(isSuccess){
    myObject.saveAndFlush();
 }
 else{
    return failure;
 }
}

由于某些原因,即使我没有保存对象,更改也会保存到数据库。

从数据库中获取对象时,它会连接到hibernate会话。您对附加对象所做的每项更改都将被持久化,而无需显式调用对象上的
save

引自

Hibernate将检测对处于持久状态的对象所做的任何更改,并在工作单元完成时将状态与数据库同步


在您的情况下,如果可能,您应该对
issucess
块中的对象执行所有更新。

在没有看到完整实现的情况下,我怀疑这是在保存,因为您的对象处于托管状态

从:

托管实体实例具有持久性标识,并与持久性上下文关联

然后,当它继续

当与实体关联的事务提交时,持久实体的状态与数据库同步。如果一个受管实体与另一个受管实体处于双向关系中,则数据将根据关系的拥有方进行持久化


因此,如果您有一个托管实体(意思是,您使用了
EntityManager
来查找它,而您没有调用
detach()
),那么在提交事务时,对该实体的更改将被持久化。

我们可以看到您正在更新对象的部分吗?它就在内部布尔if(成功){org.springframework.data.jpa.repository.JpaRepository.saveAndFlush(myObject);}我看到在这种情况下,一旦你退出这个方法,更新查询就会被记录下来。更新很简单……没有被引用或级联的对象被保存……myObject是父对象……我直接保存它。