단방향 연관관계 주의점
등록 주의점
1
2
3
4
5
6
7
8
public void tset(){
Team team=new Team("team","팀");
em.persist(team);
Member member=new Member("member","회원");
member.setTeam(team);
em.persist(member);
}
- 반드시 저장할 때 연관된 모든 엔티티는 영속 상태여야 한다.
삭제 주의점
1
2
3
4
5
public void test(){
//...
member.setTeam(null);
em.remove(member);
}
- 삭제를 할때 연관관계를 제거하고 삭제를 하지 않으면 외래 키 제약조건으로 인해, 데이터베이스 오류가 발생하기 때문에 제거하고 삭제해야 한다.
양방향 연관관계의 주의점
저장 주의점
- 엔티티를 저장할 때 연관관계 양쪽 모두 관계를 맺어주어야 한다.
- 각각 메서드를 통해 설정할 수 있지만 연관관계 주인쪽에서 메서드를 리팩토링해서 쓰는 방법도 있다.
- 방법 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
public class Member { @ManyToOne @JoinColumn("team_id") private Team team; //... public void setTeam(Team team) { if (this.team != null) { this.team.getMembers().remove(this); } this.team = team; team.getMembers().add(this); } } public class Team { @OneToMany private List<Member> members; //... public List<Member> getMembers() { return members; } }
일대다 단방향 매핑 단점
- 일대다 단방향 매핑의 단점은 매핑한 객체가 관리하는 외래 키가 다른 테이블에 있다는 점이다.
- 본인 테이블에 외캐 키가 있으면 INSERT SQL 한번이면 되지만, 다른 테이블에 외래 키가 있을경우 추가적인 UPDATE SQL을 추가로 실행해야 한다.
- 해결방법 : 양방향으로 매핑하면 된다.
일대일 단방향
- 일대일 단방향은 JPA에서 지원하지 않는다.