목록BE/JPA (112)
오봉이와 함께하는 개발 블로그
1:1[일대일] 주 테이블에 외래키 단방향 1:1 관계는 그 반대도 1:1 관계이다. 1:1 관계는 주 테이블이나 대상 테이블 중 외래키 선택이 가능하다. 주 테이블에 외래키 대상 테이블에 외래키 DB 입장에서 외래키에 유니크 제약조건을 추가해야 1:1 관계가 성립된다. MEMBER, LOCKER 모두 서로 하나씩만 가질 수 있으며, MEMBER 테이블에 LOCKER_ID를 외래키로 넣고 유니크 제약 조건을 달거나, LOCKER 테이블에 MEMBER_ID를 외래키로 넣고 유니크 제약 조건을 달아도 1:1 관계가 된다. MEMBER 테이블이 주 테이블인 상황이다. @OneToOne @JoinColumn(name = "LOCKER_ID") private Locker locker; 정리 N:1(@ManyToO..
연관관계 매핑할 때 고려해야 할 세 가지 다중성 JPA에서 나오는 어노테이션은 DB랑 매핑하기 위해 있는 것이기 때문에 DB관점에서 다중성을 기준으로 고민하자. 다대일 : @ManyToOne 실무에서 가장 많이 사용 일대다 : @OneToMany 실무에서 필요할 때 사용 일대일 : @OneToOne 실무에서 가끔 사용 다대다 : @ManyToMany 실무에서 사용을 기피해야 함. 단방향, 양방향 테이블 외래키 하나로 양쪽 조인 가능하기 때문에 사실상 방향이라는 개념이 없다. 객체 참조용 필드가 있는 쪽으로만 참조 가능하기 때문에 한쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향이라 한다. 사실 양방향이라는 것도 없다고 해야한다. 객체 입장에서는 서로 참조를 하면 단방향이 두 개가 있는 것임 용어상 쉽..
실전 - 연관관계 매핑 시작 테이블 구조는 다음과 같다 참조를 사용하도록 변경한 객체 구조는 다음과 같다. 코드 기존 코드는 아래 링크 참조 https://5bong2-develop.tistory.com/223 Member @Entity @Getter @Setter public class Member { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "MEMBER_ID") private Long id; private String name; private String city; private String street; private String zipcode; @OneToMany(mappedBy = "member") private L..
양방향 연관관계와 연관관계의 주인 - 주의점 양방향 매핑시 가장 많이 하는 실수는 연관관계의 주인에 값을 입력하지 않는 것이다. Member member = new Member(); member.setName("Member1"); em.persist(member); Team team = new Team(); team.setName("TeamA"); team.getMembers().add(member); em.persist(team); Team의 members는 @mappedBy를 했기 때문에 읽기 전용으로 바뀐다. 역방향(주인이 아닌 방향)만 연관관계를 설정했기 때문에 Member 테이블의 TEAM_ID는 null이 들어간다. Team team = new Team(); team.setName("TeamA..
양방향 연관관계와 연관관계의 주인1 - 기본 양방향 매핑 전에 했던 코드는 Member에서는 Team을 얻어올 수 있는 관계 즉, 단방햔 매핑 관계였다. 이제 우리는 Member to Team, Team to Member 모두 얻어올 수 있게 양방향 매핑 관계로 구성을 해야 한다. 테이블에서는 외래키로 조인을 하면 되기 때문에 양방향 참조를 할 때는 테이블에 변화가 생기지 않는다. 즉 테이블에서는 외래키 하나로 양방향을 다 알 수 있기 때문에 사실상 방향이 존재하지 않는다. 하지만, 객체는 아니기 때문에 Team에 Member를 넣어줘야 참조할 수 있다. 코드 멤버는 전과 동일하다. public class Member { @Id @GeneratedValue private Long id; @Column(n..