복합키 save 하는데 자꾸 오류가 떠서 찾아본 결과,
성공한 한가지 방법
처음에 오류가 난 코드
@Data @Entity @IdClass(PhoneLikePK.class) @Table(name = "phonelike") public class PhoneLike{ @Id private String userid; @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "userid") private Member member; }
수정된 코드
@Data @Entity @IdClass(PhoneLikePK.class) @Table(name = "phonelike") public class PhoneLike{ @Id @Column(name = "my_userid") private String myUserid; @Id private String userid; @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "userid", insertable = false, updatable = false) private Member member; public static PhoneLike createLike(String userid ,Member member) { PhoneLike phoneLike = new PhoneLike(); phoneLike.setMyUserid(userid); phoneLike.setMember(member); phoneLike.setUserid(member.getUserid()); return phoneLike; }
수정된 코드다
내 생각으로는 객체자체를 받아오다니보니 그걸 실제적으로 만들어줄 컬럼이 없던 것이 문제였던 것 같다.
그래서 String 컬럼을 하나 만들어 줌으로, 컬럼 생성하는데 문제가 없도록 만들었다
public static PhoneLike createLike(String userid ,Member member) {
PhoneLike phoneLike = new PhoneLike();
phoneLike.setUserid(userid);
phoneLike.setMember(member);
phoneLike.setMemFavorite(member.getUserid());
return phoneLike;
}
jpa에서 복합키를 만들때, OneToMany의 경우는 상관없지만,
ManyToOne의 경우 복합키칼럼 중 입력받을컬럼을 하나 만들면 보다 쉽게 생성되는 것 같다