session.clear ()와session.flush의 차이

session.clear() 방법은session 캐시에 있는 실체 대상을 비우고 캐시에 있는 데이터가 데이터베이스 기록과 일치하든 안 하든 상관없다.
session.flush () 방법은session 캐시에 있는 실체 대상과 데이터베이스 기록을 동기화하고 데이터의 일치성을 유지합니다.
@Test
public void testSessionClear(){
	Session session = sessionFactory.openSession();
	session.beginTransaction();
	Teacher t = (Teacher) session.get(Teacher.class, 3);
	System.out.println(t.getName());
	session.clear();// clear sql , clear 2 
	Teacher t2 = (Teacher) session.get(Teacher.class, 3);
	System.out.println(t2.getName());
	session.getTransaction().commit();
}

세션이 호출되지 않았다면.clear()는 1급 캐시가 존재하기 때문에 같은 기록을 조회하면 sql문장만 보냅니다.세션 캐시를 비우면, 여기에서 2개의 ql 문장을 보냅니다.
@Test
public void testFlush()
{
	Session session =  sessionFactory.openSession();
	session.beginTransaction();
	Teacher t = (Teacher) session.get(Teacher.class, 3);
	t.setName("xiu");
	session.flush();// flush 2 UPDAE, 
	t.setName("aty");
	session.getTransaction().commit();
}

flush를 실행하지 않으면 업데이트 문장만 보냅니다.flush를 실행하면 두 개의 업데이트 문장을 보냅니다. 즉 flush는 데이터베이스 데이터와 동기화를 강제로 합니다.

좋은 웹페이지 즐겨찾기