학습 노트 5 - hibenate 에서 LOAD 와 GET 의 차이

2360 단어 Hibernate
session 의 load 와 get 방법 은 모두 데이터베이스 에서 해당 하 는 데 이 터 를 찾 고 모델 대상 으로 전환 하 며 세 가지 상태 에서 persisent 상태 에 속 하지만 그들 사이 에는 매우 큰 차이 가 있다.
GET:

@Test
	public void  testGet(){
		Session session = sessionFactory.getCurrentSession() ;
		session.beginTransaction() ;
		Teacher t = (Teacher)session.get(Teacher.class, 1) ;
		session.getTransaction().commit() ;
	}

session. get () 방법 을 사용 할 때 hibenate 는 sql 문 구 를 직접 보 내 해당 하 는 데 이 터 를 찾 아 Teacher 대상 에 저장 하고 대상 데 이 터 를 직접 사용 합 니 다.
LOAD:

@Test
	public void  testLoad(){
		Session session = sessionFactory.getCurrentSession() ;
		session.beginTransaction() ;
		Teacher t = (Teacher)session.load(Teacher.class, 1) ; 
		t.getName() ;
		session.getTransaction().commit() ;

	}

우리 가 session. load () 방법 을 사용 할 때 load 는 Teacher 대상 의 프 록 시 를 생 성 합 니 다. SQL 문 구 를 직접 보 내 Teacher 대상 을 추출 하 는 것 이 아니 라 프 록 시 대상 이 사용 하지 않 을 때 hibenate 는 데이터 베 이 스 를 교류 하지 않 습 니 다. 대상 이 사용 할 때 t. getName () 과 같 습 니 다.SQL 문 구 를 보 내 조회 하기 때문에 LOAD 로 불 러 올 때 모든 작업 은 session 이 닫 히 기 전에 해 야 합 니 다. 그렇지 않 으 면 지연 오류 가 발생 할 수 있 습 니 다.

@Test
	public void  testLoad(){
		Session session = sessionFactory.getCurrentSession() ;
		session.beginTransaction() ;
		Teacher t = (Teacher)session.load(Teacher.class, 1) ; 
		
		session.getTransaction().commit() ;
		t.getName() ;
		
		
	}

13:32:29,766 ERROR LazyInitializationException:42 - could not initialize proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:132)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:174)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)
at com.bjsxt.hibernate.vo.Teacher_$$_javassist_0.getName(Teacher_$$_javassist_0.java)
at HibernateIDTest.testLoad(HibernateIDTest.java:80)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

좋은 웹페이지 즐겨찾기