Hibernate先删除已存在的记录后插入数据的疑问?
我在使用Hibernate更新数据时,尝试先删除一些数据然后再重新插入,
自定义的删除SQL每次都能运行,但是调用saveAll
插入却只能间断性成功。
当area
表中已经存在一条user_id
为1,platform_id
为1的数据时,删除成功了。但是调用saveAll并没有插入数据。
等到数据库没有这条数据时,再重新执行一遍,删除和插入才都运行了。再执行一次,插入又没有了,请问这是什么原因呢?
// 我先创建了一些区域集合@Transactional
public void update(InputVo resource){
User user = userRepository.findById(resource.getUserId());
List<area> areas = resources.getAreaIds().stream().map(areaId -> new Area(
new PlatformAreaPK(user, areId), //PlatformAreaPK是一个联合主键
resources.getPlatformId(),
)).collect(Collectors.toList());
// 我先使用自定义的sql删除了用户指定平台的区域
areaRepoistory.aDeleteByUserIdAndPlatformId(userId, platformId)
// 然后使用JPA自带的saveAll或saveAllAndFlush存储新的数据
areaRepository.saveAll(areas);
}
// aDeleteByUserIdAndPlatformId 方法类似如下@Modifying
// @Transactional
@Query(value = "DELETE FROM area WHERE area.user_id = ?1 AND area.platform_id = ?2", nativeQuery = true)
public void aDeleteByUserIdAndPlatformId(Long userId, Long platformId);
回答:
可以先flush一下 让删除的部分先提交
以上是 Hibernate先删除已存在的记录后插入数据的疑问? 的全部内容, 来源链接: utcz.com/p/944773.html