인프런 커뮤니티 질문&답변

김태희님의 프로필 이미지
김태희

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

값 타입 컬렉션

포스트와 리플의 매핑

해결된 질문

작성

·

279

0

수정, 처음에 리플로 썻다가 라이크로 바꿨습니다. 제가 질문하면서 헷갈렸습니다.

유저

포스트 

포스트 라이크

3가지가 있다면

라이크에는 매니투원으로 양방향설계를 하고 싶습니다.

단 시퀀스 id를 안 넣고 하고 싶은데요.

@Idclass(ReplyPK)

@Id @manytoone User userid 

@Id @manytoone Post postid 

Localdatetime created = Localdatetime.now()

이렇게 구현 하려니까 오류가 나더군요...(조인컬럼은 여기서는 생략)

아이디 어노테이션 다이브 해서 주석 보니 아이디가 될 수 있는 값 리스트가 정의 돼 있어서 제가 원하는 설계(의미없는 시퀀스가 기본키로 하기 싫을 때! 또는 디비 입장에서는 유저와 포스트아이디로 이미 기본이다 완성 됐을 때 )는 못 하던데 선생님은 이 경우 디비관리자에게 키 바꿔달라하시나요?
어떻게 하실지 궁금합니다. 

결국 제약 때문에 만들어진 모양 입니다. sid 하나 넣고 그것을 키로 만들었습니다.

답변 2

1

김태희님의 프로필 이미지
김태희
질문자

제가 원하던 매핑도 되는 군요. 제 실수 였습니다. 감사합니다.

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. XIYO님 잘 해결하셨습니다.

XIYO님이 질문했던 매핑도 지원합니다.

저는 기존 DB가 이렇게 운영되고 있었다면 그 정책을 따르고, 제가 새로 만드는 경우에는 항상 비즈니스 의미가 없는 새로운 단일 PK를 하나 만드는 것을 선호합니다.

오류는 아마 매핑을 잘못하셔서 오류가 발생했을거에요. 다음 코드를 참고해주세요.

public class MemberProductId implements Serializable {

  private String member; //MemberProduct.member와 연결

  private String product; //MemberProduct.product와 연결

}

@Entity

@IdClass(MemberProductId.class)

public class MemberProduct {

  @Id

  @ManyToOne

  @JoinColumn(name = "MEMBER_ID")

  private Member member; //MemberProductId.member와 연결

  @Id

  @ManyToOne

  @JoinColumn(name = "PRODUCT_ID")

  private Product product; //MemberProductId.product와 연결

}

추가로 복합키 매핑에 대한 자세한 내용은 JPA책을 참고해주세요.

6.4.3 다대다: 매핑의 한계와 극복, 연결 엔티티 사용

7.3 복합 키와 식별 관계 매핑

감사합니다.

김태희님의 프로필 이미지
김태희

작성한 질문수

질문하기