使用Spring Data JPA 1.11.6.RELEASE,我遇到以下问题;
在它们之间有一个简单的1对n关系,我有TableA
和TableB
,其中A
包含多个B
。我有TableB
的存储库,带有自定义删除方法;
public interface BRepository extends JpaRepository<TableB, String> {
@Modifying
void deleteByTableA(TableA tableA);
}
它用FK值删除,即TableA
在我的服务类中,我使用了这些;
@Service
public class TheService {
@Autowired
private ARepository aRepository;
@Autowired
private BRepository bRepository;
@Transactional
public void deleteInsert(List<TableB> bList) {
TableA tableA = aRepository.findByEtc(...);
bRepository.deleteByTableA(tableA);
bRepository.save(bList);
}
}
但问题是@Transactional
方法中的操作顺序根据Hibernate的优化而改变。因此,如果我在新表中存在TableB
的重复实体,则会导致一些唯一约束违规。如果我在删除&amp;之间拨打bRepository.count()
电话保存电话,这会强制我的自定义订单,但我想通过一些配置来实现这一点而不是如此愚蠢的技巧。有没有办法实现这个目标?
答案 0 :(得分:2)
似乎问题的答案在于Hibernate docs关于刷新操作的顺序。根据Hibernate JavaDocs,SQL操作顺序是:
您可能希望在第一次操作后手动冲洗它:
</ion-infinite-scroll>
或尝试替换&#34;删除+插入&#34;使用更新操作进行操作。