diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/repository/ApproversRepository.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/repository/ApproversRepository.java index 18a0af321..313d24a9f 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/repository/ApproversRepository.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/repository/ApproversRepository.java @@ -2,17 +2,22 @@ import edu.internet2.tier.shibboleth.admin.ui.security.model.Approvers; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import java.util.List; public interface ApproversRepository extends JpaRepository { + @Modifying + @Query(nativeQuery = true, value="DELETE FROM approvers_user_groups WHERE approver_groups_resource_id IN (:ids)") + void deleteGroupAssociationsForIds(@Param("ids") List ids); + Approvers findByResourceId(String resourceId); @Query(nativeQuery = true, - value = "SELECT resource_id FROM approvers WHERE resource_id IN (SELECT approvers_resource_id " + - " FROM approvers_user_groups " + - " WHERE approver_groups_resource_id = :resourceId)") + value = "SELECT approvers_list_resource_id " + + " FROM user_groups_approvers " + + " WHERE user_groups_resource_id = :resourceId") List getApproverIdsForGroup(@Param("resourceId") String resourceId); } \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/repository/GroupsRepository.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/repository/GroupsRepository.java index a435a95e9..9d877a62c 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/repository/GroupsRepository.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/repository/GroupsRepository.java @@ -10,12 +10,8 @@ public interface GroupsRepository extends JpaRepository { @Modifying - @Query(nativeQuery = true, - value = "DELETE user_groups_approvers " + - " WHERE approvers_list_resource_id IN (SELECT approvers_list_resource_id " + - " FROM user_group_approvers " + - " WHERE user_groups_resource_id = :resourceId)") - void clearApproversForGroup(@Param("resourceId") String resourceId); + @Query(nativeQuery = true, value = "DELETE FROM user_groups_approvers WHERE approvers_list_resource_id IN (:approverIds)") + void clearApproversByApproverIds(@Param("approverIds") List approverIds); void deleteByResourceId(String resourceId); diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/service/GroupServiceImpl.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/service/GroupServiceImpl.java index 438fe1aaf..2e18e48ed 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/service/GroupServiceImpl.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/service/GroupServiceImpl.java @@ -129,8 +129,10 @@ private void manageApproversList(Group group) { AtomicInteger approversCount = new AtomicInteger(); group.getApproversList().forEach(a -> approversCount.addAndGet(a.getApproverGroupIds().size())); if (approversCount.intValue() == 0) { + // Need to manually manage the join tables List ids = approversRepository.getApproverIdsForGroup(group.getResourceId()); - groupRepository.clearApproversForGroup(group.getResourceId()); + groupRepository.clearApproversByApproverIds(ids); + approversRepository.deleteGroupAssociationsForIds(ids); approversRepository.deleteAllById(ids); group.setApproversList(new ArrayList<>()); return;