Hibernate 지연 로드 에 대하 여

3381 단어
더 읽 기
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 를 사용 하여 실체 대상 을 가 져 오 면 사용 하지 않 습 니까?만약 사용 할 수 있다 면 반드시 조사해 야 한다. 그러면 지연 이 무슨 의미 가 있 겠 는가?

좋은 웹페이지 즐겨찾기