[JPA] JPA 프로그래밍 1대N 맵핑

JPA 프로그래밍 1대N 맵핑

관계에는 항상 두가지 엔티티가 존재

단방향에서 관계의 주인은 명확

단방향 @ManyToOne

public class Study {
    @Id @GeneratedValue
    private String Long id;
    private String name;
    
    @ManyToOne
    private Account owner;
}

결과는 Study테이블에 Account의 id값이 FK로 잡힘

단방향 @OneToMany

public class Account {
    @Id @GeneratedValue
    private Long id;
    private String username;
    private String password;

    @OneToMany
    private Set<Study> studies = new HashSet<>();
}

결과는 Account테이블, Study테이블, Account_studies 테이블(조인테이블) 생성

양방향

public class Study {
    @Id @GeneratedValue
    private String Long id;
    private String name;
    
    @ManyToOne
    private Account owner;
}
public class Account {
    @Id @GeneratedValue
    private Long id;
    private String username;
    private String password;

    @OneToMany(mappedBy = "owner")
    private Set<Study> studies = new HashSet<>();
}

데이터를 넣을 때는 주인쪽(FK생성되는 곳)에만 설정해도 관계가 형성 되지만

객체지향 의미상 양쪽다 넣어 두는 것이 좋음

편의를 위한 메소드를 하나 만들어 사용하는 것도 방법

public class Account {
    ... 생략
    public void addStudy(Study study) {
        this.getStudies().add(study);
        study.setOwner(this);
    }

    public void removeStudy(Study study) {
        this.getStudies().remove(study);
        study.setOwner(null);
    }
}