티스토리 뷰
◆ 연관관계 매핑
객체의 참조와 테이블의 외래 키를 매핑
방향(Direction) : 단방향, 양방향 / 방향은 객체 관계에만 존재하고 테이블 관계는 항상 양방향
다중성(Multiplicity) : 다대일, 일대다, 일대일, 다대다
@ManyToOne 다대일 관계 매핑 [N:1]
연관관계 매핑시 다중성 어노테이션은 필수
속성 | 설명 | 기본값 |
optional | false로 설정하면 연관된 엔티티가 항상 있어야 함 | true |
fetch | 글로벌 패치 전략을 설정 | @ManyToOne=FetchType.EAGER@OneToMany=FetchType.LAZY |
cascade | 속성 전이 기능을 사용 | |
targetEntity | 연관된 엔티티의 타입 정보를 설정 이 기능은 거의 사용하지 않는다 컬렉션을 사용해도 제네릭으로 타입 정보를 알 수 있다. |
@ManyToMany 다대다 관계 매핑 [N:M]
사용하지 않는 것을 추천이유) 매핑 정보만 넣는 것이 가능하고, 추가 정보를 넣는 것 자체가 불가능중간테이블이 숨겨져 있으므로 예상하지 못한 쿼리가 발생하는 경우가 생길 수 있음.
RDB에서는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다.그대신, 연결 테이블(조인 테이블)을 중간에 추가하여 일대다, 다대일 관계를 이용해야 함
@OneToOne 일대일 관계 매핑[1:1]
일대일 관계는 그 반대도 일대일이다.
일대일관계는 특이하게 주 테이블이나 대상 테이블 중에 외래키를 넣을 테이블을 선택 가능 하다.
주 테이블에 왜래키 저장
대상 테이블에 외래 키 저장
외래키에 데이터 베이스 유니크 제약조건 추가되어야 일대일 관계가 된다.
@Entity public class Member{ @OneToOne @JoinColumn(name="locker_id") private Locker locker;} |
@Entity public class Locker{ @OneToOne(mappedBy="locker") private Member member; } |
@OneToOne 어노테이션으로 일대일 단방향 관계를 매핑하고, @JoinColumn을 넣어줌 @JoinColumn은 Defult 값이 있긴 하지만 name을 정해줌 여기까지 매핑하면 단방향 관계가 된다. |
반대편에 mappedBy를 적용시켜주면 일대일 양방향 관계매핑이 된다. mappedBy="locker"는 Member엔티티티에 있는 Locker 필드와 매핑 되었다는 것을 의미함. 이 member 필드는 읽기 전용 필드이다. |
@OneToMany 일대다 관계 매핑[1:N]
속성 | 설명 | 기본값 |
mappedBy | 연관관계의 주인 필드를 선택 | |
fetch | 글로벌 페치 전략을 설정 | @ManyToOne=FetchType.EAGER@OneToMany=FetchType.LAZY |
cascade | 속성 전이 기능을 사용 | |
targetEntity | 연관된 엔티티의 타입 정보를 설정 이 기능은 거의 사용하지 않는다. 컬렉션을 사용해도 제네릭으로 타입 정보를 알 수 있다. |
FetchType의 LAZY와 EAGER
LAZY
지연로딩
연관관계가 설정된 테이블에 대해 select를 하지 않는다.
1:N 과 같이 여러 가지 데이터가 로딩이 일어날 경우 사용하는 방식
EAGER
즉시로딩
연관관계가 설정된 모든 테이블에 대해 조인이 이루어진다.
1:1 연관관계와 같이 한 건만 존재할 때 사용하는 방식
@JoinTable 테이블과 테이블 사이에 별도의 조인 테이블을 만들어 양 테이블간의 연관관계 설정
속성 | 설명 | 예시 |
name | 조인 테이블명 | name ="TB_CMN_POST_TAG" |
JoinColumns | 현재 엔티티를 참조하는 외래키 | joinColumns=@JoinColumn(name="post_id") |
inverseJoinColumns | 반대방향 엔티티를 참조하는 외래키 | inverseJoinColumn=@JoinColumn(name="tag_name") |
@JoinColumn 외래 키 매핑할 때 사용
속성 | 설명 | 기본값 |
name | 매핑할 외래 키 이름 | 필드명 + _ + 참조하는 테이블의 기본 키 컬럼명 |
referencedColumnName | 외래 키가 참조하는 대상 테이블의 컬럼명 | 참조하는 테이블의 기본 키 컬럼명 |
foreignKey(DDL) | 외래 키 제약조건을 직접 지정할 수 있다.이 속성은 테이블을 생성할 때만 사용한다. | |
uniquenullable insertableupdatablecolumnDefinitiontable | @Column의 속성과 같다. |
@Enumerated
열거타입에 대한 매핑은 @Enumerated 어노테이션을 사용
@Enumerated(EnumType.STRING) : @Enumerated 어노테이션으로 설정한 열거형을 DB로 저장할 때 어떤 값으로 저장할지 결정
@Basic
@Id 어노테이션을 제외한 나머지 영속 대상은 @Basic 어노테이션을 사용
@Basic 어노테이션이 보이지 않는데 생략된 것
'WEB > 기타' 카테고리의 다른 글
[JPA] 5. Repository query keywords (0) | 2024.01.23 |
---|---|
[JPA] 4. Repository (0) | 2024.01.23 |
[JPA] 3. Entity - 설정, 속성 (0) | 2024.01.20 |
[JPA] 2. JPA 사용 설정 (0) | 2024.01.20 |
[JPA] 1. JPA (Java Persistence API) 란? (0) | 2024.01.20 |
- Total
- Today
- Yesterday
- 무료폰트 #무료웹폰트 #한수원한돋움 #한수원한울림 #한울림체 #한돋움체
- 자바스크립트break
- 좋은책
- 자바스크립트 #javascript #math
- ajax
- 쇼팬하우어 #좋은책
- 증폭기 #아이피타임증폭기
- 좋은책 #밥프록터 #부의원리
- SQL명령어 #SQL
- 정보처리기사 #정보처리기사요약 #정보처리기사요점정리
- 연명의료결정제도 #사전연명의료의향서 #사전연명의료의향서등록기관 #광주사전연명의료의향서
- 와이파이신호 #와이파이 #와이파이신호세게
- 파비콘사이즈
- jdk #jre
- sw기술자평균임금 #2025년 sw기술자 평균임금
- 테스크탑무선랜카드 #무선랜카드 #아이피타이무선랜카드 #a3000mini #무선랜카드추천
- 자바스크립트정규표현식
- 광주분식 #광주분식맛집 #상추튀김 #상추튀김맛집 #광주상추튀김
- echart
- 자바스크립트countiue
- 썬크림 #닥터지썬크림 #내돈내산 #내돈내산썬크림 #썬크림추천 #spf50썬크림 #닥터지메디유브이울트라선
- thymeleaf
- 와이파이증폭기추천 #와이파이설치
- lg그램pro #lg그램 #노트북 #노트북추천 #lg노트북
- 바지락칼국수 #월곡동칼국수 #칼국수맛집
- iptime와이파이증폭기 #와이파이증폭기설치
- jQuery #jQuery이미지슬라이드 #이미지슬라이드
- 파비콘 #파비콘 사이트에 적용
- css미디어쿼리 #미디어쿼리 #mediaquery
- 와이파이약할때
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |