以后如何在调用save()的相同方法中使用Jpa存储库save()中的结果对象?

MarkoŠego:

在我的控制器中,我从服务中调用一个方法,该方法将在数据库中调用save(),并向我返回保存的对象。我要保存的该类具有一个auto_generated ID,因此,当我将其保存到数据库中时,我希望返回的ID设置正确(并且工作正常)。在同一控制器中,我将save()的结果存储在一个变量中,并且发现它的ID未设置。那是因为save()实际上会在事务完成后将我保存到数据库中(当我退出控制器方法时。我的问题是我想在退出控制器中的其他服务之前使用该结果。如何强制服务(当然也包括存储库)立即保存并返回结果。

在classB中使用classA的ID的原因是,因为classB是数据库中两个表之间的“连接”表,因此,仅当满足某些条件时,我才应更新它。我已经在存储库中尝试过saveAndFlush()方法,该服务正在调用该方法,但无济于事。我的服务仅在调用save()或saveAndFlush()方法,而没有其他任何事情(因此在服务中不会出现问题)。

我已经使用REQUIRES_NEW尝试了@Transactional批注,但是它不起作用。

@PostMapping("")
public ClassA createClassA(@RequestBody ClassA classA){
   ClassA a = classAService.saveClassA (classA);
   System.out.println("Id = " + a.getIdClassA());
   classBService.saveClassB(new classB(a.getId()); //it will cause an exception if a.getId() returns 0

   return classA;
}

System.out.println将打印出Id = 0,但是应该打印出Id =(数据库生成的某个数字,并且不能为零,因为数据库具有AUTO INCREMENT)

我已经测试了所有其他服务,存储库,连接等。我只想知道如何强制响应立即生效,以便可以将其存储在变量中并稍后在方法中使用。

MarkoŠego:

好吧,感谢您的评论,@ JBNizet和@Lebecca都说对了:)。如果我告诉班级将在数据库中生成ID,则saveAndFlush()确实会解决我的问题。这就是为什么要输入@GeneratedValue(strategy = GenerationType.IDENTITY)并添加saveAndFlush()的原因。经过这两个步骤,它起作用了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在JPA存储库中的findAll()之后调用Save()

如何在JPA存储库中的自定义方法中使用规范

以后如何对存储在 useState 中的对象使用方法?

如何在Spring数据存储库中使用@Query中限制结果

如何在Python中存储用户输入并在以后调用?

在Play中使用save()方法!继承(JPA)

存储对象供以后在Java中使用

如何在Eloquent中使用save()方法创建和更新?

如何缩短相同方法的大量调用?

如何区分相同方法的调用

如何在Ruby中使用存储在数组中的方法名称来调用类方法?

JVM是否通过将相同方法调用的结果存储在同一方法中来修复我的低效率代码?

如何在Kotlin中使用JpaRepository中的save()

如何在存储库querybuilder中调用实体的方法

在 GAE 的 JPA 中以相同方法调用多个 JpaRepository 时,id 为“”的对象由不同的对象管理器管理

使用工作单元在同一事务中调用来自不同存储库的不同方法

如何在JPA存储库方法中使用组合键的一部分?

如何在 Spring JPA 存储库中的删除 @Query 中使用 ?#{principal.username} 时修复语法错误?

如何在不同方法中使用值迭代循环?

基于存储库方法在 JPA 中以不同方式处理数据

Spring Batch/Data JPA 应用程序在调用 JPA 存储库(save、saveAll)方法时不会将数据持久化/保存到 Postgres 数据库

如何在 Java 中使用反射调用 Kotlin 对象方法?

如何在 Java 中使用泛型来更轻松地使用 JPA 存储库?

如何在typeorm中使用存储库?

如何在另一个存储库中使用相同的问题标签?

如何在Spring JPA存储库中使用构造函数映射

如何在存储库中使用Spring Boot JPA / Hibernate进行内部联接?

调用存储库的 save() 未插入表并给出 org.springframework.orm.jpa.JpaSystemException

如何模拟Save方法的行为来测试我的存储库?