Spring 并且 Hibernate Transaction 不适用于批量保存操作
Spring and Hibernate Transaction does not work for mass save operations
我正在使用 JpaRepository.I 使用 @Transactional 进行批量保存,但它没有 work.I 总结我所做的过程:
我有两个实体
- THeaderEntity
- TDetailsEntity
首先,我保存了 TheaderEntity,因为 THeaderEntity 的信息将在 TDetailsEntity 中使用(一对多,CrudRepository.save(),1 个 Header for 50 Details)
然后转保存在TDetailsEntity的loop.I中,如果任何注册表出错,都希望整个过程回滚。
@Transactional
public Result createTdetailsFromHeaderId(String token, String headerId, DetailRequests detailRequests)
我使用了@Transactional,但只有收到错误的记录被回滚。
要回答为什么只有 1 条记录被回滚,您可以查看 Spring 的事务逻辑——根据您的描述,我怀疑每次保存都会打开 1 个事务,但解决此问题的一种简单方法是:
- 将
@OneToMany
关系调整为 cascade
实体持久化。
- 创建适当的实体(1
THeaderEntity
和 50 TDetailsEntity
已正确设置所有对象引用)。
save
然后应该将持久化级联到其 TDetailsEntity
的 THeaderEntity
。
我正在使用 JpaRepository.I 使用 @Transactional 进行批量保存,但它没有 work.I 总结我所做的过程: 我有两个实体
- THeaderEntity
- TDetailsEntity
首先,我保存了 TheaderEntity,因为 THeaderEntity 的信息将在 TDetailsEntity 中使用(一对多,CrudRepository.save(),1 个 Header for 50 Details) 然后转保存在TDetailsEntity的loop.I中,如果任何注册表出错,都希望整个过程回滚。
@Transactional
public Result createTdetailsFromHeaderId(String token, String headerId, DetailRequests detailRequests)
我使用了@Transactional,但只有收到错误的记录被回滚。
要回答为什么只有 1 条记录被回滚,您可以查看 Spring 的事务逻辑——根据您的描述,我怀疑每次保存都会打开 1 个事务,但解决此问题的一种简单方法是:
- 将
@OneToMany
关系调整为cascade
实体持久化。 - 创建适当的实体(1
THeaderEntity
和 50TDetailsEntity
已正确设置所有对象引用)。 save
然后应该将持久化级联到其TDetailsEntity
的THeaderEntity
。