Java 休眠事务问题

Java 休眠事务问题,java,hibernate,spring-aop,Java,Hibernate,Spring Aop,我有以下设置。我使用spring数据通过hibernate访问数据 public class Controller { private ServiceA serviceA public A someMethod () { A a = new A(); . . . a=serviceA.add(a); . . return a; } } public class ServiceAImpl implements ServiceA { publi

我有以下设置。我使用spring数据通过hibernate访问数据

public class Controller {

private ServiceA serviceA
public A someMethod () {
   A a = new A();
   .
   .
   .
   a=serviceA.add(a);
   .
   .
   return a;
 }
}

public class ServiceAImpl implements ServiceA {

public RepoA repoA

@Transcational 
@AnnotationUsedInAroundAspect(name="xyz")
public A add(A a) {
   A existingA = repoA.get(a.id);
   repoA.delete(existingA);
   return repoA.Save(a);

  }
}

public class Aspect {

   @Around("@annotation(a)")
   public Object AroundAspect(ProceedingJoinPoint joinPoint, AnnotationUsedInAroundAspect a) {
  Object value = joinPoint.proceed();
  /**
  Not all statements are flushed to db at this point
  */
  .
  .
  .
  return value;

}


}

在Aspect(注释部分周围),delete被刷新到DB,但是save(保存新的A对象)还没有完成。但如果删除了delete语句,则save将在此时刷新到db。只刷新给定表上的第一条语句,其余语句此时不刷新。但一旦控件返回到控制器,所有语句都将刷新。有什么可以帮助我了解hibernate发生了什么或者是否有问题吗?

你把flushed和committed弄糊涂了。提交事务时发生提交。此提交会自动调用flush()。如果希望在任意时间刷新所有内容,则显式调用flush()。否则,Hibernate将尽可能多地等待,即直到提交。如果是这样,则Y将被删除刷新到db?Hibernate必须在执行其他操作之前刷新,以确保一切工作正常,就像每个操作都有效地写入数据库一样。Y不会同时刷新这两个语句(delete和save)。Y是否只刷新删除??(注意:保存也会刷新,但仅在以后才刷新),因为必须刷新删除才能使保存正常工作,并且保存可以等到事务提交时间,因为之前不需要它。