[Spring] JPA 복합키 save하는 방법

bluemind·2022년 11월 22일
0

jpa

목록 보기
2/5

복합키 save 하는데 자꾸 오류가 떠서 찾아본 결과,
성공한 한가지 방법

Entity 설정을 해줄 때, ManyToOne으로 join한 객체 이외에 입력시켜줄 컬럼을 하나 더 만든다

처음에 오류가 난 코드

@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 컬럼을 하나 만들어 줌으로, 컬럼 생성하는데 문제가 없도록 만들었다

생성자를 하나 만들어서 PhoneLike 객체에 데이터 값을 쉽게 담을 수 있도록 처리하였다.

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의 경우 복합키칼럼 중 입력받을컬럼을 하나 만들면 보다 쉽게 생성되는 것 같다

profile
실력있는 개발자가 되기 위한 여정

0개의 댓글