JPA라는 카테고리를 따로 만들어 정리해야할 것 같지만 일단 스프링 부트와 함께 진행하기 때문에 스프링 부트 카테고리에 정리하기로 했다.
1. @Embeddable
우선 복합키 역할을 할 클래스를 생성한다.
@Data
@Embeddable
public class CommentKey implements Serializable{
@Column(name = "board_sn")
private Long boardSn;
@Column(name = "comment_sn")
private Long commentSn;
}
그리고 엔티티에 복합키 역할을 하는 클래스를 변수로 선언해 @EmbeddedId를 사용해 연결한다.
@Data
@Entity
@Table(name = "comment")
public class Comment{
@EmbeddedId
private CommentKey commentKey;
...
}
2. @IdClass
복합키 역할을 할 클래스를 만든다. @Embeddable 어노테이션 없이 평범하게 Getter/Setter를 가진 클래스면 충분하다.
@Data
public class CommentKey implements Serializable {
private Long boardSn;
private Long commentSn;
}
엔티티에는 @IdClass 어노테이션을 사용하고 값으로 복합키 클래스를 설정한다. 그리고 기본키에 해당하는 변수 선언문들에 @Id 어노테이션을 작성하면 된다.
@Data
@Entity
@IdClass(CommentKey.class)
@Table(name = "comment")
public class Comment {
@Id
@Column(name = "board_sn")
private Long boardSn;
@Id
@Column(name = "comment_sn")
private Long commentSn;
...
}
* 복합키의 경우 @GeneratedValue를 사용하여 기본키의 값을 자동으로 생성하도록 설정할 수 없다. 그러므로 쿼리를 수행하기 전 직접 기본키를 생성하여 설정해주어야한다.
'Java > Spring Boot' 카테고리의 다른 글
[Spring Boot] JpaRepository에서 @Query 사용하기 (0) | 2023.04.10 |
---|---|
[Spring Boot] JPA의 Entity에서 1대N 관계 설정 (0) | 2023.04.10 |
[Spring Boot] Controller 예외처리 (0) | 2023.04.09 |
[Spring Boot] 외부 properties 파일 불러오기 (0) | 2023.04.03 |
[Spring Boot] Controller 생성 (0) | 2023.03.28 |