JPA 연관 관계 매핑1_일대일 단방향 매핑하기

개발자·2022년 4월 19일
0
post-thumbnail
post-custom-banner

Entity들은 대부분 다른 Entity와 연관 관계를 맺고 있다. JPA에서는 Entity에 연관 관계를 매핑해두고 필요할 때 해당 Entity와 연관된 Entity를 사용해 조금 더 객체지향적인 프로그래밍(OOP)을 할 수 있도록 도와준다.


회원 정보를 담고 있는 Member라는 Entity와 각 회원들의 장바구니를 나타내는 Entity가 아래와 같이 있다.

@Entity
@Table(name = "member")
@Getter @Setter
@ToString
public class Member {

    @Id
    @Column(name="member_id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String name;

    private String email;

    private String password;

    private String address;

    @Enumerated(EnumType.STRING)
    private Role role;

    public static Member createMember(MemberFormDto memberFormDto, PasswordEncoder passwordEncoder) {
        Member member = new Member();
        member.setName(memberFormDto.getName());
        member.setEmail(memberFormDto.getEmail());
        member.setAddress(memberFormDto.getAddress());
        member.setRole(Role.USER);
        String password = passwordEncoder.encode(memberFormDto.getPassword());
        member.setPassword(password);
        return member;
    }
}
@Entity
@Table(name = "cart")
@Getter @Setter
@ToString
public class Cart {

    @Id
    @Column(name = "cart_id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @OneToOne
    @JoinColumn(name = "member_id")
    private Member member;
}

쇼핑몰에서 회원들은 각자 자신의 장바구니를 하나씩 갖고 있다. 장바구니 입장에서 보아도 자신과 매핑되는 한 명의 회원을 갖을 것이다. 즉, Member Entity와 Cart Entity는 일대일 매핑이다.

Member Enttiy 소스코드를 보면 Cart Enttiy와 관련된 코드는 없다는 걸 확인할 수 있다. 즉, Cart Enttiy가 @JoinColumn 어노테이션에서 member_id라는 외래키를 이용해 Member Enttiy를 일방적으로 참조하고 있다. Cart Entitiy와 Member Entity는 일대일로 매핑돼 있으며, Cart Entity는 Member Entity를 참조하는 일대일 단방향 매핑이다.

이렇게 매핑을 맺어주면 Cart Entity를 조회하면서 Member Entity의 정보도 동시에 가져올 수 있다는 장점이 생긴다.

profile
I DEVELOP THEREFORE, I AM 😄
post-custom-banner

0개의 댓글