Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 |
30 | 31 |
Tags
- DB replication
- 트리맵
- 임베디드타입
- 폰켓몬
- 2178
- SpringBatch
- 백준
- JPA
- BFS
- 운영체제
- 컴퓨터구조
- 코테
- 스케일아웃
- Spring JPA
- 파이널프로젝트
- 산업은행it
- 그래프탐색
- 프로젝트
- 외래키제약조건위반
- 해시
- flyway
- 트리셋
- fatch
- 산업은행청년인턴
- springboot
- CS
- findById
- CPU스케줄링
- 프로그래머스
- 구현
Archives
- Today
- Total
나 JAVA 봐라
Embeddable Type 본문
review 엔티티에 이어, review에 대한 반응을 남기는 기능을 구현하기 위해 Embedded Type에 대해 알아보게 되었다.
review 반응을 저장하기 위한 review_reaction DB를 새로 구상해보았더니 필드를 아래와 같이 구성해야한다.
- reviewReactionPK(ReviewReactionPK) : reviewId와 userId를 갖는 Embedded PK
- reviewReaction(int) : 어떤 반응을 남겼는지를 나타내는 int (반응은 1부터 5까지 있다. )
Embedded Type이란,
- 여러 개의 컬럼을 하나의 객체로 묶어서 사용하는 것을 의미하며, 이 객체를 엔티티의 일부로 사용할 수 있다.
- @Embeddable : JPA에서 임베디드 타입을 정의하는데 사용되는 어노테이션, 해당 클래스가 Embedded Type임을 JPA에게 알린다.
- ex) 주소 정보를 갖는 Address 클래스가 있고 이를 User 엔터티에 포함하고 싶을 때, Address 클래스에 @Embeddable을 붙이고 User 엔터티 클래스에서 @Embedded 어노테이션을 사용하여 포함할 수 있다.
위의 필드 중, ReviewReactionPK을 클래스로 구현을 해보았다.
@Embeddable 을 사용했다.
@Getter
@EqualsAndHashCode
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Embeddable
public class ReviewReactionPK implements Serializable {
@Column(name = "user_id", nullable = false)
private Long userId;
@Column(name = "review_id", nullable = false)
private Long reviewId;
private ReviewReactionPK(Long userId, Long reviewId) {
this.userId = userId;
this.reviewId = reviewId;
}
public static ReviewReactionPK of(Long userId, Long reviewId) {
return new ReviewReactionPK(
userId,
reviewId
);
}
}
그리고 위와 같이 생성해준 클래스를 포함하는 ReviewReaction 를 아래와 같이 구현했다.
@EmbeddedId 를 사용하여 복합키로 선언했다.
@Slf4j
@ToString
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@EqualsAndHashCode(of = {"reviewReactionPK"})
@EntityListeners(AuditingEntityListener.class)
@Entity(name = "review_reaction")
public class ReviewReaction {
@EmbeddedId
private ReviewReactionPK reviewReactionPK;
@Column(name = "reaction_type", nullable = false)
private int reactionType;
private ReviewReaction(ReviewReactionPK reviewReactionPK, int reactionType) {
this.reviewReactionPK = reviewReactionPK;
this.reactionType = reactionType;
}
public static ReviewReaction of(ReviewReactionPK reviewReactionPK, int reactionType) {
return new ReviewReaction(
reviewReactionPK,
reactionType
);
}
}
'Spring > Spring Boot' 카테고리의 다른 글
Spring Boot + AWS RDS 연동 및 Read/Write 분산 처리 (0) | 2024.01.24 |
---|---|
컨트롤러와 서비스에서 Embedded PK를 어떻게 교환? (0) | 2024.01.09 |