티스토리 뷰
1. 하이버네이트의 FetchType은 어떤 Entity를 데이터베이스에서 가져올 때
2. 관계를 가지는 다른 Entity의 정보를 언제 로딩하는 지에 대한 설정이다.
2-1 Eagar은 Entity의 데이터를 가지고 오면서 같이 관계가 있는 Entity의 정보까지 같이 가지고 온다.
2-2 Lazy는 나중에 필요시에 관계 Entity의 정보를 가지고 온다.
3. 하이버네이트의 기본 FetchtType은 각 Mapping마다 다른데
3-1 @OneToOne은 Eager
3-2 @OneToMany는 Lazy
3-3 @ManyToOne은 Eager
3-4 @ManyToMany는 Lazy
3-5 Default 설정은 일관적인 부분이 있는데 관계를 맺는 상태 entity가 one side이면 Eager many side면 Lazy가 된다.
3-5-1 이것은 당연하게도 하나의 데이터를 가지고 오는 건 부담이 없지만 많은 데이터를 가지고 올 경우 부담이 된다.
3-6 기본값이 아주 상식적이라서 실제 작업시 별도설정의 필요를 못느낀다.
4. Lazy Loading에서 관계있는 데이터를 가지고 오는 방법
4-1 기본적으로 Session이 close되지 않은 상태에서만 가능하다.
4-2 session.get 메소드를 통해 목적하는 entity데이터를 가져오고 가져온 후
4-2-1 entity의 getter 호출하여 관계 데이터를 가져온다.
4-3 HQL을 사용해서 한번에 데이터를 다 가져온다.
4-3-1 이 경우는 데이터를 Eagar loading처럼 데이터를 이미 다 가져오기 때문에
4-3-2 session close되어도 가져온 데이터를 사용할 수 있다.
4-3-3 간단한 예제는 다음과 같다. 데이터베이스는 이전 포스트와 동일하다.
public class FetchEntityWithHQL {
public static void main(String[] args) {
SessionFactory factory = new Configuration().configure()
.addAnnotatedClass(Instructor.class)
.addAnnotatedClass(InstructorDetail.class)
.addAnnotatedClass(Course.class)
.buildSessionFactory();
Session session = factory.getCurrentSession();
try {
session.beginTransaction();
String queryString = "from Instructor i join fetch i.courses where i.id= :instructorId";
Query<Instructor> query = session.createQuery(queryString, Instructor.class);
query.setParameter("instructorId", 4L);
Instructor instructor = query.getSingleResult();
session.getTransaction().commit();
instructor.getCourses().stream().forEach(System.out::println);
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
factory.close();
}
}
}
'Spring > Hibernate' 카테고리의 다른 글
Hibernate : Many-To-Many Mapping - Part 1 (0) | 2020.05.07 |
---|---|
Hibernate : One-To-Many Mapping Uni-Direction (0) | 2020.05.07 |
Hibernate : One-To-Many Mapping Bi-Directional (0) | 2020.05.06 |
Hibernate : One-To-One Mapping Bi-Directional (0) | 2020.05.06 |
Hibernate : One-To-One Mapping Uni-Directional(단방향) (0) | 2020.05.04 |
- Total
- Today
- Yesterday
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
- Security
- Rest
- jsp
- hibernate
- 외부파일
- WebMvc
- one-to-one
- mapping
- MYSQL
- 하이버네이트
- one-to-many
- 매핑
- 상속
- 스프링
- spring boot
- 설정하기
- Many-To-Many
- XML
- login
- Spring Security
- RestTemplate
- Angular
- 로그인
- Validation
- 설정
- crud
- 스프링부트
- form
- Spring
- 자바