📖 How to make Composite Keys in Spring Entity
1. IdClass로 구현하는 방식
사용 방법은 간단하다!
1) Entity에 id를 설정해준다
@IdClass(UserPostId.class)
클래스에 이 어노테이션을 붙여서 id를 지정해주고
@Id
복합키로 사용할 fk Column 두개에 해당 어노테이션을 붙여준다
전체 Entity 코드
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
@Table(name = "tb_user_post")
@IdClass(UserPostId.class)
public class UserPost {
@Id
@ManyToOne
@OnDelete(action = OnDeleteAction.CASCADE)
@JoinColumn(name = "user_id", nullable = false)
private User user;
@Id
@ManyToOne
@OnDelete(action = OnDeleteAction.CASCADE)
@JoinColumn(name = "post_id", nullable = false)
private Post post;
@Enumerated(EnumType.STRING)
private UserPostRole role;
@Builder
public UserPost(User user, Post post , UserPostRole role){
this.user = user;
this.post = post;
this.role = role;
}
}
2) 복합키 class를 만들어준다
2-1) Serializable을 implement해서 equals와 hashCode 메서드 구현하기
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class UserBoardId implements Serializable {
private Long user;
private Long board;
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
UserBoardId that = (UserBoardId) o;
return Objects.equals(user, that.user) && Objects.equals(board, that.board);
}
@Override
public int hashCode() {
return Objects.hash(user, board);
}
}
2-2) Annotaion으로 Override없이 처리하기
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@NoArgsConstructor
public class UserPostId implements Serializable {
@EqualsAndHashCode.Include
private Long user;
@EqualsAndHashCode.Include
private Long post;
}
3) 복합키를 id로 갖는 Repository를 생성해준다
public interface UserPostRepository extends JpaRepository<UserPost, UserPostId> {
}
2. EmbeddedId로 구현하는 방식
졸려서 내일 쓰겠음
'TIL(Develop) > Spring' 카테고리의 다른 글
[Kotlin] RestClient를 MSA로 구성된 Spring module간 통신에 사용하는 예시 (0) | 2024.04.25 |
---|---|
HTTP Interface Client, (RestClient, WebClient, RestTemplate의 차이) (0) | 2024.04.25 |
Spring 프로젝트 HTTP에서 HTTPS로 변경하기 (Java로 SSL 만들어서 Spring 프로젝트에 적용하기(P12 방식)) (0) | 2024.04.17 |
Custom annotation으로 Bean Validation + Parameter Validation 하기 (어노테이션 정의해서 검증하기) (0) | 2024.03.25 |
📖Hibernate/JPA의 id 생성 전략들 (0) | 2024.01.17 |