본문으로 건너뛰기
ElastiCORE 3.0 은 릴리스 후보(RC)입니다: Maven Central 의 3.0.261022-rc1. 2.2 라인 프로젝트는 2.2 문서를 보세요.
버전: 3.0

리포지터리

repository: 는 엔티티의 Spring Data 리포지터리에 쿼리 메서드를 더합니다. 키는 엔티티 이름이고, 메서드는 methods: 목록으로 적습니다.

model/repository.yml
repository:
Stock:
methods:
# 파생 쿼리 - query 없이 이름만으로
- id: findByItemItemCodeAndWarehouse
params:
itemCode: string
warehouse: string
return: Optional<Stock>

# JPQL
- id: findLowStock
params:
threshold: int
return: List<Stock>
query: "SELECT s FROM Stock s WHERE s.onHand < :threshold ORDER BY s.onHand"

# 페이징
- id: findByWarehouse
params:
warehouse: string
return: Page<Stock>
pageable: true
키뜻
id메서드 이름
params파라미터 (이름: DSL 타입)
returnList<Entity>, Optional<Entity>, Entity, Page<Entity>, long, DTO ...
queryJPQL. 없으면 Spring Data 파생 쿼리
nativeQuery: true네이티브 SQL
pageable: true마지막 파라미터로 Pageable

methods 목록이 없는 항목(메서드를 키로 적은 형식)은 읽히지 않습니다: 생성기가 경고하고 건너뜁니다.

읽기 모델: DTO 로 투영​

화면·보고서는 애그리거트가 아니라 DTO 를 읽습니다. 반환 타입을 DTO 로 적고, 컬럼 별칭을 DTO 속성 이름에 맞춥니다:

repository:
SalesOrder:
methods:
- id: summarizeByPartner
params: { status: OrderStatus }
return: List<PartnerSalesDTO>
query: "SELECT o.partner.partnerId AS partnerId, o.partner.name AS partnerName, COUNT(o) AS orderCount, SUM(o.totalAmount) AS totalAmount FROM SalesOrder o WHERE o.status = :status GROUP BY o.partner.partnerId, o.partner.name"

v3·Kotlin 에서 리포지터리는 List<Tuple> 을, 조회 포트는 List<PartnerSalesDTO> 를 돌려줍니다: 어댑터가 별칭으로 속성을 채웁니다(대소문자·밑줄 무시, 타입 변환 포함). 별칭이 없는 컬럼은 오류입니다. 2.x 호환 출력은 예전처럼 List<Object[]> 입니다.

DDD·헥사고날 번들에서​

선언놓이는 곳이유
조회 + 반환이 Root / Optional<Root> / List<Root> + 페이징 아님RootRepositoryPort (도메인)도메인 서비스가 애그리거트를 찾는 질문
그 밖 (Page, DTO 투영, count, 수정 쿼리)RootQueryPort (애플리케이션)화면·조회용이거나 애그리거트를 거치지 않는 일괄 쓰기
// StockRepositoryPort (생성)
Optional<Stock> findByItemItemCodeAndWarehouse(String itemCode, String warehouse);

보존 블록​

생성된 리포지터리에 둬야 하는 코드는 클래스를 닫는 괄호 바로 앞에 보존 블록 하나로 둡니다. 다시 생성해도 남습니다:

// !-----------------------------------------------------------

@Query("SELECT e FROM Entity e WHERE e.name = :name")
List<Entity> findByName(@Param("name") String name);

// ------------------------------------------------------------!

JPA 밖의 SQL(네이티브 보고서, 다른 데이터소스)은 DBMS 포트입니다.