StackAsk is a community where developers ask questions, share answers and learn from each others real-world experience, so every solved problem helps the next person who runs into it.
@OneToMany( mappedBy = "parent", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true ) private List<B> childrens = new ArrayList<>();
@Transactional public void deleteChildren(Long aId, List<Long> deleteIds) { A parent = parentRepository.findById(aId) .orElseThrow(); List<B> existingChildren = childRepository.findByParentId(aId); // kiểm tra deleteIds có thuộc về parent hay không List<B> childrenToDelete = existingChildren.stream() .filter(child -> deleteIds.contains(child.getId())) .toList(); childRepository.deleteAll(childrenToDelete); }
parentRepository.save(parent);
@OneToMany
List<B> existingChildren = childRepository.findByParentId(aId);
public interface ChildRepository extends JpaRepository<B, Long> { @Modifying(clearAutomatically = true, flushAutomatically = true) @Query(""" DELETE FROM B child WHERE child.parent.id = :parentId AND child.id IN :deleteIds """) int deleteByParentIdAndIds( @Param("parentId") Long parentId, @Param("deleteIds") Collection<Long> deleteIds ); } @Transactional public void deleteChildren(Long parentId, Collection<Long> deleteIds) { if (deleteIds == null || deleteIds.isEmpty()) { return; } if (!parentRepository.existsById(parentId)) { throw new EntityNotFoundException( "Parent not found: " + parentId ); } int deletedCount = childRepository.deleteByParentIdAndIds( parentId, deleteIds ); if (deletedCount != deleteIds.size()) { throw new IllegalArgumentException( "One or more child IDs do not belong to parent: " + parentId ); } }
2.2K Point(s)
1.2K Point(s)
313 Point(s)
178 Point(s)
138 Point(s)
Input your email to receive reset password link, or if you remember your password, you can click