Java Spring JPA股票实体
我有一个使用SpringMVC和JPA的Web应用程序(Hibernate是我的JPA提供者)。应用程序的结构是标准/普通的Web应用程序体系结构,如控制器>服务>存储库(您可以在其中对JPA实体执行常规CRUD操作) 我有一个服务类,叫做Java Spring JPA股票实体,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我有一个使用SpringMVC和JPA的Web应用程序(Hibernate是我的JPA提供者)。应用程序的结构是标准/普通的Web应用程序体系结构,如控制器>服务>存储库(您可以在其中对JPA实体执行常规CRUD操作) 我有一个服务类,叫做a,它依次调用另外两个服务B和CA启动交易B和C都在一个公共实体(例如产品)和其他实体上运行 我的要求是:如果B对产品实体进行一些更改(在使用em.find获取它之后),当C调用em.find对产品(相同的ID)时,应反映B更改,而不保留对数据库的B更改。如何
a
,它依次调用另外两个服务B
和C
<代码>A启动交易B
和C
都在一个公共实体(例如产品
)和其他实体上运行
我的要求是:如果B
对产品
实体进行一些更改(在使用em.find
获取它之后),当C
调用em.find
对产品
(相同的ID)时,应反映B
更改,而不保留对数据库的B
更改。如何做到这一点
如果我从
B
调用em.merge
,它会一直保存到数据库。我想要的是,A
应该只在事务启动时提交/回滚事务。您可以公开您的“服务”类声明吗?您如何管理这两者之间的事务?如果这都是同一事务的一部分,那么ServiceC将始终“查看”更新的实体。它是在获取过时的实体吗?您在事务内部执行SQL查询和提交事务之间感到困惑。C将看到B所做的更改,因为它们都在同一事务中运行。当Hibernate认为有必要时,对实体所做的更改(无论服务做了哪些更改)都会自动写入数据库。并且只有在提交事务时,这些更改才会永久化。如果事务回滚,它们将被取消。如果您甚至不想将更改写入数据库,那么就不要修改实体。