반응형
아래 자주 쓰이는 기본적인 객체 관계 매핑 어노테이션을 정리해보았다.
@JoinColumn
외래 키를 매핑할 때 사용한다.
속성 | 기능 | 기본값(Default) |
name | 매핑할 외래 키 이름 | 필드명 + _ + 참조하는 테이블의 기본 키 컬럼 |
referencedColumnName | 외래 키가 참조하는 대상 테이블의 컬럼명 | 참조하는 테이블의 기본 키 컬럼명 |
foreignKye(DDL) | 외래 키 졔약조건을 직접 지정할 수 있다. 이 속성은 테이블을 생성할 때만 사용한다. |
|
unique nulldable insertable updatable columnDefinition table |
@Column의 속성과 같다 |
class Member {
@ManyToOne
@JoinColumn(name = "team_id", referencedColumnName = "team_id")
private Team team;
}
@ManyToOne
다대일(N:1) 관계를 매핑한다.
속성 | 기능 | 기본값(Default) |
optional | false로 설정하면 연관된 엔티티가 항상 있어야 한다. | 필드명 + _ + 참조하는 테이블의 기본 키 컬럼 |
fetch | 글로벌 페치 전략을 설정한다. | FetchType.EAGER |
cascade | 영속성 전이 기능을 사용한다. | |
targetEntity | 연관된 엔티티의 타입 정보를 설정한다. 컬렉션을 사용해도 제네릭으로 타입 정보를 알 수 있다. |
class Member {
@ManyToOne(optional = false, fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
@JoinColumn(name = "team_id", referencedColumnName = "team_id")
private Team team;
}
@OneToMany
일대다(1:N) 관계를 매핑한다.
속성 | 기능 | 기본값(Default) |
optional | false로 설정하면 연관된 엔티티가 항상 있어야 한다. | 필드명 + _ + 참조하는 테이블의 기본 키 컬럼 |
fetch | 글로벌 페치 전략을 설정한다. | FetchType.LAZE |
cascade | 영속성 전이 기능을 사용한다. | |
targetEntity | 연관된 엔티티의 타입 정보를 설정한다. 컬렉션을 사용해도 제네릭으로 타입 정보를 알 수 있다. |
|
mappedBy | 연관관계의 주인을 설정한다. |
class Team {
@OneToMany(mappedBy = "team")
private List<Member> members;
}
엔티티를 단방향으로 매핑하면 참조를 하나만 사용하면 된다.
하지만 양방향으로 매핑하게 되면 엔티티는 둘인데 외래 키는 하나기 때문에 둘 사이에 차이가 발생한다.
이런 차이로 인해서 JPA에서는 두 객체 연관관계 중 하나를 정해서 테이블의 외래키를 관리해야하는데 이것을 연관관계의 주인이라 한다.
연관관계의 주인은 외래키가 있는 엔티티로 설정해야 한다.
외래키가 없는 엔티티로 설정은 가능하지만 성능 상 권장하지 않는다.
cascade 속성
연관관계 어노테이션들의 cascade 속성은 영속성 전이 기능을 사용할 수 있게 한다.
한마디로 매핑된 엔티티를 등록하고, 지우고, 수정이 가능하도록 설정할 수 있다.
필요한 행위만 허용하고 되도록이면 ALL을 사용하지 않는 것이 좋다.(너무 위험..)
- CascadeType.ALL : 하위 엔티티의 모든 작업이 가능하다.
- CascadeType.PERSIST : 하위 엔티티를 등록할 수 있다.
- CascadeType.MERGE : 하위 엔티티를 수정할 수 있다.
- CascadeType.REMOVE : 하위 엔티티를 삭제할 수 있다.
- CascadeType.REFRESH : 데이터베이스로부터 값을 새로고침 한다.
- CascadeType.DETACH : 영속성 컨텍스트에서 엔티티 제거한다.
반응형
'JPA' 카테고리의 다른 글
엔티티 상속 관계 매핑 (0) | 2021.12.31 |
---|---|
연관관계 설정 시 주의사항 (0) | 2021.12.30 |
하이버네이트(Hidernate) 설명 및 설정법 (0) | 2021.12.28 |
엔티티 매핑 어노테이션 정리 (0) | 2021.12.28 |
엔티티 매니저와 엔티티의 영속성 관리 (0) | 2021.12.28 |