작성
·
65
·
수정됨
0
강의 처럼 벌크 연산 후
int resultCount = em.createQuery("update Member m set m.age=20")
.executeUpdate();
clear없이 바로 createQuery를 날리면,
Member result = em.createQuery("select m from Member m where m.id = :id", Member.class)
.setParameter("id", member1.getId())
.getSingleResult();
System.out.println("member.getAge() = " + result.getAge());
아래와 같은 select 쿼리가 날라가고 age가 원래값으로 나옵니다.
Hibernate:
/* select
m
from
Member m
where
m.id = :id */ select
m1_0.id,
m1_0.age,
m1_0.memberType,
m1_0.TEAM_ID,
m1_0.username
from
Member m1_0
where
m1_0.id=?
member.getAge() = 10
//////////////////////////////
find처럼 selcet문이 안날라갈줄 알았는데, 날라가서 createQuery 작동방식이 궁금합니다.
1.이 쿼리가 실제로 db에 날라갔는데,
age=20값을 가지고오면서 영속성 컨텍스트에 들렸는데,
이미 캐시가 존재해서, 쿼리 값을 업데이트 안해주고 원래값 age=10을 가지고 온건가요?
2. 아니면 로그에 보이는 쿼리가 실제 db 에 날라가지 않고 생성만된채로, 영속성 컨텍스트를 찾는건가요?