[Spring Data JPA] SqlResultSetMapping과NamedNativeQuery의 사용법 노트
10697 단어 JavaSpring Boottech
개요
여러 테이블을 결합할 때의 SELECT 문구 등 JPA가 자동으로 생성하는 방법에는 대응하기 어려울 때도 있다.JPA(hibernate)의 테이블 연결 트랩(n+1 문제)에서 보듯이 Enity 간에 정의하고 결합 관계를 맺는 것도 불가능한 것은 아니지만 SELECT 문장을 직접 사용하고 싶을 때가 있다.
이번에는 대응하는 방법으로
SqlResultSetMapping
과 NamedNativeQuery
에니티에 데이터를 적어서 넣는 방법을 사용해 보려고 합니다.사용법
SqlResultSetMapping의 가이드의
5.エンティティマッピング
에 기술된 대로 @SqlResultSetMapping
에 Enity의 범주, 속성 및 열에 대한 링크를 정의합니다.또한 @NamedNativeQuery
에서 SQL 문을 정의하여 Sql ResultSetMapping과 연결합니다.또한 How to Use Named Queries with Spring Data JPA 글에서 말한 바와 같이 Repository에서 Named NativeQuery가 정의한 이름으로 방법 이름을 정의한다.
샘플
실제 샘플로 urls표와domains표가 있을 때 이 두 표를 결합시켜 정보를 얻는 예를 소개한다.
Entity
@SqlResultSetMapping(
name = "siteInfoMap",
entities = {
@EntityResult(
entityClass= SiteInfo.class,
fields = {
// カラム名とプロパティ名を紐付け
@FieldResult(name="urlId", column="url_id"),
@FieldResult(name="url", column="url"),
@FieldResult(name="domainId", column="domain_id"),
@FieldResult(name="domain", column="domain")
}
)
}
)
@NamedNativeQuery(
name = "SiteInfo.getSiteInfo",
// SqlResultSetMappingで定義した名前
resultSetMapping = "siteInfoMap",
query = "select u.url_id, u.url, u.domain_id, d.domain from urls u inner join domains d on d.id = u.domain_id"
)
@Entity
public class SiteInfo {
@Id
private Long urlId;
private String url;
private Long domainId;
private String domain;
public SiteInfo(){}
public Long getUrlId() { return this.urlId; }
public void setUrlId(Long urlId) { this.urlId = urlId; }
public String getUrl() { return this.url; }
public void setUrl(String url) { this.url = url; }
public Long getDomainId() { return this.domainId; }
public void setDomainId(Long domainId) { this.domainId = domainId; }
public String getDomain() { return this.domain; }
public void setDomain(String domain) { this.domain = domain; }
}
Repository에서 위에서 정의한 조회 이름getSiteInfo
을 통해 방법의 이름을 정의합니다.Repository
@Repository
public interface SiteInfoRepository extends JpaRepository<SiteInfo, String> {
List<SiteInfo> getSiteInfo();
}
Reference
이 문제에 관하여([Spring Data JPA] SqlResultSetMapping과NamedNativeQuery의 사용법 노트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/someone7140/articles/afef8b125dcb50980975텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)