Hibernate 지연 로드 에 대하 여
package com.lottery.test;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "T_PERSON", schema = "XJ")
public class TPerson implements java.io.Serializable {
private Integer id;
private TB TB;
private TA TA;
private String name;
private String age;
public TPerson() {
}
@Id
@GeneratedValue
@Column(name = "ID", unique = true, nullable = false, precision = 20, scale = 0)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "B_ID", nullable = false)
public TB getTB() {
return this.TB;
}
public void setTB(TB TB) {
this.TB = TB;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "A_ID", nullable = false)
public TA getTA() {
return this.TA;
}
public void setTA(TA TA) {
this.TA = TA;
}
@Column(name = "NAME", length = 20)
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "AGE", length = 20)
public String getAge() {
return this.age;
}
public void setAge(String age) {
this.age = age;
}
}
먼저 위의 이 실체 류 를 보면 두 개의 키 종류 TA 와 TB 가 있 는데 각각 지연 로드 를 사용 했다.
다음은 테스트 방법 입 니 다.
Session session = HibernateSessionFactory.getSession();
TPerson p =(TPerson) session.get(TPerson.class, 1);
TPerson p1 =(TPerson) session.load(TPerson.class, 1);
//session.close();
TA a = p.getTA();
a.getName();
TB b = p.getTB();
b.getName();
System.out.println(p);
session.get(TPerson.class, 1);
session.close();
먼저 get 방법 에 대해 이야기 하고 get 은 먼저 session 캐 시 에 가서 찾 습 니 다. 2 급 캐 시 에 가서 찾 지 않 으 면 데이터 베 이 스 를 찾 습 니 다. 데이터 베 이 스 를 찾 으 면 실체 와 관련 된 실 체 를 판단 합 니 다. 만약 에 관련 실체 가 지연 되 어 로드 를 사용 하면 관련 실 체 를 조회 하지 않 고 사용 할 때 만 찾 습 니 다. 또한 관련 된 것 은 load 방식 을 사용 합 니 다. 예 를 들 어 p. getTA ()검색 할 줄 모 르 면 a. getName () 이 진정 으로 찾 을 수 있 습 니 다.
get 방식 즉시 검사, null 로 돌아 오지 않 음
load 방식 은 get 과 마찬가지 로 session 캐 시 에서 먼저 찾 고 없 으 면 2 급 캐 시 로 찾 습 니 다. 없 으 면 프 록 시 대상 을 만 들 고 사용 할 때 만 찾 습 니 다.
load 지연 검사, Object NotFoundException 이상 던 지지 않 음
사용 지연 은 반드시 주의해 야 합 니 다. 지연 조회 이기 때문에 session 종료 후 지연 조회 시 session 종료 이상 을 던 집 니 다.
이러한 상황 을 고려 하여 session 관 리 는 도 메 인 층 에 있 습 니 다. 도 메 인 조회 후 보기 층 에서 session 은 닫 혀 있 습 니 다. 실 체 를 다시 사용 하면 이상 할 수 있 으 므 로 로드 지연 을 사용 하려 면 이 점 을 고려 해 야 합 니 다.
로드 지연 로드 가 필요 하 다 고 생각 했 습 니 다. laod 의 장점 은 지연 방식 으로 성능 을 제공 하 는 것 입 니 다. 문 제 는 사용자 가 load 를 사용 하여 실체 대상 을 가 져 오 면 사용 하지 않 습 니까?만약 사용 할 수 있다 면 반드시 조사해 야 한다. 그러면 지연 이 무슨 의미 가 있 겠 는가?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.