GwMetric ibatis -> jpa 로 변경
This commit is contained in:
@@ -3,6 +3,8 @@ package com.eactive.apim.portal.obp.repository;
|
||||
import com.eactive.apim.portal.obp.entity.ObpGwMetric;
|
||||
import com.eactive.eai.data.jpa.BaseRepository;
|
||||
import com.eactive.eai.rms.data.EMSDataSource;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
@@ -16,9 +18,30 @@ import java.util.Optional;
|
||||
public interface ObpGwMetricRepository extends BaseRepository<ObpGwMetric, String> {
|
||||
|
||||
/**
|
||||
* UPSERT 판단을 위한 기존 데이터 조회
|
||||
* UPSERT 판단을 위한 기존 데이터 조회 (NULL 안전)
|
||||
* Unique Key: (timeslice, api_id, client_id, hostname, org_id)
|
||||
*
|
||||
* <p>Spring Data JPA의 메서드 이름 기반 쿼리는 NULL 비교를 제대로 처리하지 못함.
|
||||
* SQL에서 {@code column = NULL}은 항상 false이므로, NULL 값이 있는 레코드를 찾지 못함.
|
||||
* 이 쿼리는 {@code (column = :param OR (column IS NULL AND :param IS NULL))} 패턴으로 NULL을 안전하게 처리함.</p>
|
||||
*/
|
||||
@Query("SELECT m FROM ObpGwMetric m WHERE m.timeslice = :timeslice " +
|
||||
"AND (m.apiId = :apiId OR (m.apiId IS NULL AND :apiId IS NULL)) " +
|
||||
"AND (m.clientId = :clientId OR (m.clientId IS NULL AND :clientId IS NULL)) " +
|
||||
"AND (m.hostname = :hostname OR (m.hostname IS NULL AND :hostname IS NULL)) " +
|
||||
"AND (m.orgId = :orgId OR (m.orgId IS NULL AND :orgId IS NULL))")
|
||||
Optional<ObpGwMetric> findByUniqueKeyNullSafe(
|
||||
@Param("timeslice") LocalDateTime timeslice,
|
||||
@Param("apiId") String apiId,
|
||||
@Param("clientId") String clientId,
|
||||
@Param("hostname") String hostname,
|
||||
@Param("orgId") String orgId
|
||||
);
|
||||
|
||||
/**
|
||||
* @deprecated NULL 비교 문제로 {@link #findByUniqueKeyNullSafe} 사용 권장
|
||||
*/
|
||||
@Deprecated
|
||||
Optional<ObpGwMetric> findByTimesliceAndApiIdAndClientIdAndHostnameAndOrgId(
|
||||
LocalDateTime timeslice,
|
||||
String apiId,
|
||||
|
||||
Reference in New Issue
Block a user