일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- java
- 자바 ORM 표준 JPA 프로그래밍
- 원격 브랜 삭제
- intellij 핵심 단축키
- Stream
- ksql
- 마이크로 서비스
- HandlerMethodArgumentResolver
- aws
- Spring Cloud Netflix
- @TransactionalEventListener
- #docker compose
- javascript case
- 리눅스
- intellij favorites
- multipart테스트
- 백명석님
- git
- 친절한 SQL 튜닝
- ksqldb
- 리팩토링 2판
- intellij 즐겨찾기
- findTopBy
- vue.js
- JPA
- Linux
- IntelliJ
- @Transactional Propagation
- 자바 ORM 표준 JPA 프로그래밍 정리
- CompletableFuture
- Today
- Total
시그마 삽질==six 시그마
JPA -프록시와 연관관계 관리 본문
우아한 형제들의 김영한 팀장님의 '자바 ORM 표준 JPA 프로그래밍'을
구입하시길 강력 추천드립니다.
책 구입을 원하시는분은 요기를 클릭하시면 됩니다.
저자 직강 인프런 강의도 있습니다 궁금하신분은 요기를 클릭
하단의 내용은 제가 예전에 읽었던 내용을 요약 정리한 것입니다.
-프록시 객체
실제 Entity 대신 DB 조회를 지연시키는 가짜객체
프록시 객체는 원본 엔티티를 상속받은 객체
실제 객체에대한 참조를 보관
클래스명 출력시 ...javassist..하면 프록시 객체임
1. 즉시로딩 fetch=FetchType.EAGER
연관된 Entity 즉시 조회
JPA는 즉시로딩을 최적화하기위해 가능하면 조인쿼리를 사용한다
@ManyToOne, @OneToOne은 즉시로딩이 default <---명시적으로 지연로딩으로 변경하라!
(optional=false:내부조인)
(optional=true: 외부조인)
외래키에 null값 허용시 외부조인함(성능낮아짐).
DB만 not null할게 아니라 JPA에서 내부조인 사용하려면 nullable=false 설정 or optional=false 설정하면됨
@OneToMany, @ManyToMany
컬랙션 즉시로딩은 항상 외부 조인을 사용한다
(optional=false:외부조인)
(optional=true: 외부조인)
2. 지연로딩 fetch=FetchType.LAZY
연관 Entity를 프록시로 조회.프록시를 실제 사용할때 초기화하면서 DB 조회
@OneToMany, @ManyToMany은 지연로딩이 default
(optional=false:외부조인)
(optional=true: 외부조인)
결론:모든 연관관계에 지연로딩을 사용하자!!! 꼭 필요시에만 즉시 로딩을 사용하자!
3.영속성 전이:CASCADE
Entity 영속 상태로 만들때 연관된 Entity도 영속상태 만들기 원할때 사용
CascadeType.PERSIST ->부모 저장시 자식도 저장됨
CascadeType.REMOVE ->부모 삭제시 자식도 삭제됨
orphanRemoval=true : 부모 삭제시 자식도 삭제 @OneToOne, @OneToMany만 사용가능
'프로그래밍 > JPA' 카테고리의 다른 글
JPA -객체 지향 쿼리언어 (0) | 2020.04.09 |
---|---|
JPA -값 타입 (0) | 2020.04.09 |
JPA -고급 매핑 (0) | 2020.04.09 |
JPA -다양한 연관관계 매핑 (0) | 2020.04.09 |
JPA -연관관계 매핑 (1) | 2020.04.08 |