안녕하세요 오늘은 JPA 사용시 @Entity를 외래키의 값을 통해 조회하는 방법을 알아 보려고 합니다. 대부분 간단한CRUD의 경우 JpaRepository를 통해 쉽고 빠르게 처리합니다. 하지만 Entity의 컬럼값으로 조회는 어떻게 하는지 알지만 FK의 값으로 조회하고 싶은경우 findby를 어떻게 작성해야 될지 모르는 경우가 많아 이렇게 글을 작성하게 되었습니다.
Entity
Member.class
@ToString
@Getter
@Setter
@Entity
@Builder
@Table(name = "member")
@AllArgsConstructor
@NoArgsConstructor
public class Member{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int idx;
@Enumerated(value = EnumType.STRING)
public USER_TYPE type;
public String id;
public String name;
public String age;
@ManyToOne(optional = false)
@JoinColumn(name = "team_idx" ,referencedColumnName = "idx")
public Team team;
}
Team.class
@ToString
@Setter
@Getter
@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Team {
@Id
@Column(name = "idx")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int teamIdx;
private String teamName;
@OneToMany(mappedBy = "team",fetch = FetchType.LAZY)
private List<Member> memberList = new ArrayList<>();
}
Repository
findBy + FK로 조회하는 경우 아래의 규칙으로 method명으로 작성하시면 됩니다.
findBy + {fk를 관리하는 entity의 필드명에서 첫글자를 대문자} + _ + {fk entity의 식별자 필드명에서 첫글자를 대문자}
UserRepo.interface
@Repository
public interface UserRepo extends JpaRepository<Member, Integer> {
List<Member> findByTeam_TeamIdx(int idxx);
}
Controller
UserController.class
@GetMapping("list")
public ResponseEntity<?> getJpaTest3(){
List<Member> list = userRepo.findByTeam_TeamIdx(1);
return new ResponseEntity<>(list, HttpStatus.OK);
}
Result
아래와 같이 FK값으로 정상 적으로 조회가 되는 것을 확인 할 수 있습니다. 일반적인 컬럼 값으로 조회하는 방법은 블로그에 많이 있는데 FK값을 가지고 조회하는 방법은 없어서 이렇게 작성하게 되었습니다.
많은 분들에게 도움이 되었으면 좋겠습니다 ㅎㅎ
'JPA' 카테고리의 다른 글
JPA - 1차캐시 동작 조건 (0) | 2024.07.20 |
---|---|
JPA - OneToOne관계 N+1문제 (0) | 2022.04.24 |