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.apim.portal.obp.entity.ObpGwMetric;
|
||||||
import com.eactive.eai.data.jpa.BaseRepository;
|
import com.eactive.eai.data.jpa.BaseRepository;
|
||||||
import com.eactive.eai.rms.data.EMSDataSource;
|
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.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -16,9 +18,30 @@ import java.util.Optional;
|
|||||||
public interface ObpGwMetricRepository extends BaseRepository<ObpGwMetric, String> {
|
public interface ObpGwMetricRepository extends BaseRepository<ObpGwMetric, String> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UPSERT 판단을 위한 기존 데이터 조회
|
* UPSERT 판단을 위한 기존 데이터 조회 (NULL 안전)
|
||||||
* Unique Key: (timeslice, api_id, client_id, hostname, org_id)
|
* 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(
|
Optional<ObpGwMetric> findByTimesliceAndApiIdAndClientIdAndHostnameAndOrgId(
|
||||||
LocalDateTime timeslice,
|
LocalDateTime timeslice,
|
||||||
String apiId,
|
String apiId,
|
||||||
|
|||||||
Reference in New Issue
Block a user