흰 스타렉스에서 내가 내리지

[JPA] 연관관계 - 다대일,일대다,일대일,@ManyToOne,@OneToMany,@OneToOne 본문

Spring

[JPA] 연관관계 - 다대일,일대다,일대일,@ManyToOne,@OneToMany,@OneToOne

주씨. 2023. 2. 10. 22:01
728x90

다대일, 일대다, N:1, 1:N, ManyToOne, OneToMany - 양방향

@Entity
@Getter @Setter
public class Member{
    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;

    private String username;

    @ManyToOne
    @JoinColumn(name = "TEAM_ID")
    private Team team;

    public void setTeam(Team team){
        this.team = team;

        //무한루프에 빠지지 않도록 체크
        if(!team.getMembers().contains(this)){
            team.getMembers().add(this);
        }
    }
}

@Entity
@Getter @Setter
public class Team {
    @Id @GeneratedValue
    @Column(name = "TEAM_ID")
    private Long id;

    private String name;

    @OneToMany(mappedBy = "team")
    private List<Member> members = new ArrayList<Member>();

    public void addMember(Member member){
        this.members.add(member);
        if(member.getTeam() != this){   //무한루프에 빠지지 않도록 체크
            member.setTeam(this);
        }
    }
}

 

일대일, 1:1 양방향 매핑

@Entity
@Getter @Setter
public class Member{
    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;

    private String username;

    @OneToOne
    @JoinColumn(name = "LOCKER_ID")
    private Locker locker;
}

@Entity
@Getter @Setter
public class Locker {
    @Id @GeneratedValue
    @Column(name = "LOCKER_ID")
    private Long id;

    private String name;

    @OneToOne(mappedBy = "locker")
    private Member member;
}