1. 개요
이 예제에서는 복합 키 기반 JPA 엔터티를 쿼리하기 위한 @EmbeddedId 어노테이션 및 " findBy " 메서드의 사용을 다룰 것입니다.
따라서 @EmbeddeId 및 @Embeddable 어노테이션을 사용 하여 JPA 엔터티의 복합 키를 나타냅니다 . 또한 목표를 달성 하려면 Spring JpaRepository 를 사용해야 합니다.
우리는 부분 기본 키로 개체를 쿼리하는 데 집중할 것입니다.
2. @Embeddable 및 @EmbeddedId 필요
소프트웨어에서 우리는 테이블의 항목을 정의하기 위해 복합 기본 키가 필요한 많은 사용 사례를 접하게 됩니다. 복합 기본 키는 테이블의 행을 고유하게 식별하기 위해 둘 이상의 열을 사용하는 키입니다 .
클래스에서 @Embeddable 어노테이션을 사용하여 Spring 데이터에서 복합 기본 키를 나타냅니다 . 그런 다음 이 키는 @Embeddable 유형 의 필드에서 @EmbeddedId 어노테이션을 사용하여 복합 기본 키로 테이블의 해당 엔티티 클래스에 포함됩니다 .
3. 예시
책 레코드에 저자 와 이름 으로 구성된 복합 기본 키가 있는 책 테이블을 고려하십시오 . 때로는 기본 키의 일부로 책 을 찾고 싶을 수도 있습니다 . 예를 들어 사용자는 특정 저자 의 책만 검색하려고 할 수 있습니다 . JPA로 이 작업을 수행하는 방법을 배웁니다.
기본 애플리케이션은 @EmbeddedId BookId가 있는 @Embeddable BookId 및 @Entity Book 으로 구성됩니다.
3.1. @포함 가능
이 섹션에서 BookId 클래스를 정의해 보겠습니다 . 저자 와 이름 은 고유한 BookId 를 지정합니다 — 클래스는 Serializable 이며 equals 및 hashCode 메서드 를 모두 구현합니다 .
@Embeddable
public class BookId implements Serializable {
private String author;
private String name;
// standard getters and setters
}
3.2. @Entity 및 @EmbeddedId
Book 엔터티에는 @EmbeddedId BookId 및 책 과 관련된 기타 필드가 있습니다 . BookId 는 Book 엔터티에 복합 키가 있음을 JPA에 알립니다 .
@Entity
public class Book {
@EmbeddedId
private BookId id;
private String genre;
private Integer price;
//standard getters and setters
}
3.3. JPA 저장소 및 메소드 이름 지정
엔티티 Book 및 BookId 로 JpaRepository 를 확장하여 JPA 저장소 인터페이스를 신속하게 정의해 보겠습니다 .
@Repository
public interface BookRepository extends JpaRepository<Book, BookId> {
List<Book> findByIdName(String name);
List<Book> findByIdAuthor(String author);
}
id 변수의 필드 이름 중 일부를 사용하여 Spring Data 쿼리 메서드를 파생합니다. 따라서 JPA는 부분 기본 키 쿼리를 다음과 같이 해석합니다.
findByIdName -> directive "findBy" field "id.name"
findByIdAuthor -> directive "findBy" field "id.author"
4. 결론
JPA를 사용하여 복합 키를 효율적으로 매핑하고 파생 쿼리를 통해 쿼리할 수 있습니다.
이 기사에서는 부분 ID 필드 검색을 실행하는 작은 예를 보았습니다. 복합 기본 키를 나타내는 @Embeddable 어노테이션과 엔티티에 복합 키를 삽입하는 @EmbeddedId 어노테이션을 살펴 보았습니다.
마지막으로 JpaRepository findBy 파생 메서드 를 사용 하여 부분 ID 필드로 검색하는 방법을 살펴보았습니다.
항상 그렇듯이 이 사용방법(예제)의 예제 코드는 GitHub 에서 사용할 수 있습니다 .