java
[JPA] 일대일 조인 테이블 @EmbeddedId 사용
nari0_0
2023. 10. 12. 18:06
728x90
@Embeddable, @EmbeddedId를 사용해 일대일 조인테이블 Entity 만드는 방법을 간단하게 정리합니다.
@Entity
public class Buff {
@Id
@GeneratedValue
private Integer id;
private Integer type;
private Integer value;
}
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}
@Entity
public class BuffUser {
@EmbeddedId
private BuffUserPk id;
@MapsId("userId")
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@MapsId("buffId")
@ManyToOne
@JoinColumn(name = "buff_id")
private Buff buff;
}
@Embeddable
public class BuffUserPk implements Serializable {
private Long userId;
private Integer buffId;
}
+ 복합키 비식별 관계
@Entity
public class TestEntity {
private TestPk pk;
private String name;
@EmbeddedId
public TestPk getPk() {
return pk;
}
public void setPk(TmpPk pk) {
this.pk = pk;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Embeddable
public class TestPk implements Serializable {
private Integer id1;
private Integer id2;
public Integer getId1() {
return id1;
}
public void setId1(Integer id1) {
this.id1 = id1;
}
public Integer getId2() {
return id2;
}
public void setId2(Integer id2) {
this.id2 = id2;
}
}
+복합키 일대일 식별관계
부모 테이블의 기본 키 값을 자식 테이블의 기본키 값으로 사용한다. (PK, FK)
부모 테이블의 기본키가 복합키가 아니라면! 자식테이블에서 복합키로 구성 하지 않는다.
@Entity
public class User {
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
...
}
@Entity
public class UserAlarm {
private Long userId;
private User user;
@Id
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
@MapsId
@OneToOne
@JoinColumn(name = "user_id")
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
...
}
728x90