Home Jpa에서 복합키 쿼리메소드 만드는법
Post
Cancel

Jpa에서 복합키 쿼리메소드 만드는법

Jpa에서 복합키 쿼리메소드 만드는법

🎊 시작하기 전에…

쿼리 메소드는 findBy~ 와 같이 직접 쿼리를 짜는 것이 아닌, 메소드 명으로 쿼리를 만드는 것이다.

Data Jpa에서 제공하는 기능이다.

이 글에서 설명하는 내용은 아래 엔티티를 기반으로 설명한다. 또, 쿼리메소드는 UserRepository 내부에 있는 것으로 생각한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@Entity
class Country {
  ...
  @Id
  private int id;
  ...
}

@Embeddable
class UserId implements Serializable {
  
  private int userId;
  
  @ManyToOne(fetch = FetchType.LAZY, optional = false)
  @JoinColumn(name = "counter_id")
  private Country country;
  
}

@Entity
class User {
  
  @EmbeddedId
  private UserId userId;
  
  ...
  
}

1️⃣ 복합키 내부 일반 컬럼

일반 컬럼을 findBy로 조회하는 방법은 findByUserIdUserId이다.

천천히 풀어보자면, findByUserId는 UserId라는 복합키를 이용해서 유저를 조회한다는 뜻인데, 여기서 UserId 내부 필드인 userId의 값으로 조회한다는 것을 UserIdUserId(복합키 필드명 + 복합키 내부 필드명)으로 만든 것이다.

2️⃣ 복합키 내부 FK

위 엔티티의 복합키에 Country와 관계가 맺어져있는데 일반 컬럼을 조회하듯이 하면 findByUserIdCountry로 할 수 있다. 하지만 이렇게 한다면 파라미터로 Country를 받게된다. 따라서 Country엔티티의 PK로 조회하고싶다면 findByUserIdCountryId로 하면 된다. 이 메소드 명을 풀면 (복합키 필드명 + 복합키 내부 필드명 + 복합키 내부 필드(Country)의 필드)로 된다.

This post is licensed under CC BY 4.0 by the author.