From 96c69365d3e2ee084c452f2b4f457184797973cf Mon Sep 17 00:00:00 2001 From: HYOJIN Date: Fri, 27 Mar 2026 09:46:40 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=84=A4=EC=A0=95=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20=EC=8B=9C=20params/fields=20unique=20=EC=A0=9C=EC=95=BD=20?= =?UTF-8?q?=EC=9C=84=EB=B0=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hibernate가 INSERT를 DELETE보다 먼저 실행하는 문제 해결. clear() 후 entityManager.flush()로 DELETE를 먼저 실행 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../java/com/snp/batch/service/BypassConfigService.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/snp/batch/service/BypassConfigService.java b/src/main/java/com/snp/batch/service/BypassConfigService.java index ca42345..deed43b 100644 --- a/src/main/java/com/snp/batch/service/BypassConfigService.java +++ b/src/main/java/com/snp/batch/service/BypassConfigService.java @@ -8,6 +8,7 @@ import com.snp.batch.global.model.BypassApiConfig; import com.snp.batch.global.model.BypassApiField; import com.snp.batch.global.model.BypassApiParam; import com.snp.batch.global.repository.BypassApiConfigRepository; +import jakarta.persistence.EntityManager; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -25,6 +26,7 @@ import java.util.List; public class BypassConfigService { private final BypassApiConfigRepository configRepository; + private final EntityManager entityManager; /** * 설정 목록 조회 @@ -101,8 +103,11 @@ public class BypassConfigService { config.setResponseType(request.getResponseType()); config.setDescription(request.getDescription()); - // params 교체 (orphanRemoval로 기존 자동 삭제) + // params/fields 교체: clear → flush(DELETE 실행) → 새로 추가 config.getParams().clear(); + config.getFields().clear(); + entityManager.flush(); + if (request.getParams() != null) { request.getParams().forEach(p -> { BypassApiParam param = toParamEntity(p); @@ -111,8 +116,6 @@ public class BypassConfigService { }); } - // fields 교체 - config.getFields().clear(); if (request.getFields() != null) { request.getFields().forEach(f -> { BypassApiField field = toFieldEntity(f);