Hello

[JPA] 일대일 조인 테이블 @EmbeddedId 사용 본문

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