From 1e1b3e103c8db31e71e100309ad372f1382031ad Mon Sep 17 00:00:00 2001 From: johngreen Date: Thu, 14 May 2026 09:18:26 +0900 Subject: [PATCH] =?UTF-8?q?fix(=ED=85=8C=EC=9D=B4=EB=B8=94=ED=83=80?= =?UTF-8?q?=EC=9E=85):=20constraints=20SQL=20ARRAY=5FAGG=20=E2=86=92=20tex?= =?UTF-8?q?t=20=EC=BA=90=EC=8A=A4=ED=8A=B8=EB=A1=9C=20=EC=9D=BC=EC=9B=90?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 이전 PR (#15) 의 Java parseColumnArray 분기 추가가 실제 운영 환경에서 빈 배열을 그대로 반환 — MyBatis ↔ PostgreSQL JDBC 의 array 타입 변환이 java.sql.Array 가 아닌 다른 경로로 도착하는 듯. 방식 변경: SQL 단에서 ARRAY_AGG(...)::text 캐스트 → PostgreSQL 가 "{email,phone}" String 으로 반환. parseColumnArray 의 기존 String 분기 (중괄호 제거 + 쉼표 split) 가 자연스럽게 처리. 장점: - JDBC 드라이버 / MyBatis 변환 동작에 의존하지 않음 - parseColumnArray 코드 단순 복원 (List/String 2분기) - 한 줄 SQL 변경으로 PK/IDX 두 쿼리 모두 해결 검증: - gradle compileJava BUILD SUCCESSFUL - solution.invyone.com 에서 customer_mng PK columns / email IDX columns 비어있지 않음 확인 예정 Co-Authored-By: Claude Opus 4.7 (1M context) --- .../com/erp/service/TableManagementService.java | 15 --------------- .../src/main/resources/mapper/tableManagement.xml | 4 ++-- 2 files changed, 2 insertions(+), 17 deletions(-) diff --git a/backend-spring/src/main/java/com/erp/service/TableManagementService.java b/backend-spring/src/main/java/com/erp/service/TableManagementService.java index 138064c6..af045a51 100644 --- a/backend-spring/src/main/java/com/erp/service/TableManagementService.java +++ b/backend-spring/src/main/java/com/erp/service/TableManagementService.java @@ -10,7 +10,6 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.sql.SQLException; import java.util.*; import java.util.stream.Collectors; @@ -942,20 +941,6 @@ public class TableManagementService extends BaseService { @SuppressWarnings("unchecked") private List parseColumnArray(Object cols) { if (cols instanceof List) return (List) cols; - if (cols instanceof java.sql.Array arr) { - try { - Object raw = arr.getArray(); - if (raw instanceof Object[] arrObj) { - return Arrays.stream(arrObj) - .filter(Objects::nonNull) - .map(Object::toString) - .filter(s -> !s.isBlank()) - .collect(Collectors.toList()); - } - } catch (SQLException e) { - log.warn("parseColumnArray: java.sql.Array decode 실패 — fallback", e); - } - } if (cols instanceof String s) { return Arrays.stream(s.replace("{", "").replace("}", "").split(",")) .filter(c -> !c.isBlank()) diff --git a/backend-spring/src/main/resources/mapper/tableManagement.xml b/backend-spring/src/main/resources/mapper/tableManagement.xml index 239f6c8d..845fc12a 100644 --- a/backend-spring/src/main/resources/mapper/tableManagement.xml +++ b/backend-spring/src/main/resources/mapper/tableManagement.xml @@ -389,7 +389,7 @@