2010-03-19 8 views
1

나는 아주 기본적인 Hibernate 문제 일지 모른다. HQL (및/또는 Criteria) 업데이트 쿼리가 라이브 도메인 객체의 업데이트를 유발합니까? 그리고 그들은 자동으로 현재 유효하지 않은 도메인 객체를 첫 번째 레벨 캐시에서 플러시합니까?HQL 업데이트와 도메인 객체

예 :

Player playerReference1 = session.get(Player.class,1); 
session.createQuery("update players set gold = 100").executeUpdate(); 
//Question #1 -- does playerReference1.getGold() now return 100? 
Player playerReference2 = session.get(Player.class,1); 
//Question #2 -- does playerReference2.getGold() return 100, or is it the same exact object? 

내가 몇 가지 코드가 나중에 필요할 수있는 기회가있을 경우 HQL 업데이트로 영향을받는 모든 개체를 축출하는 연습을해야 하는가?

+0

실제 솔루션은 나에게 잘 돌아갔다. 대량 업데이트 직후에 현재 세션에서 플러시 + 클리어를 수행했다. –

답변

2

두 가지 질문에 대한 대답은 모두 아니오입니다. Java Persistence with Hibernate에 따르면, 12 장 :

당신은 당신이 만드는 어떤 변화가 (메모리 내 객체에 영향을주지 않습니다, 데이터베이스의 행에 직접 동작하는 SQL 문을 실행하면 어떤 상태가 월 있다). 즉, 모든 직접적인 DML 문은 Hibernate 영속 컨텍스트 (및 모든 캐시)를 우회합니다.

이 내용은 HQL에도 적용됩니다. 세션에서 개체를로드하기 전에 DML을 실행하는 것이 좋습니다.

+0

그러나 이것은 SQL 문이 아닌 HQL 문이다. –

+0

Hrm ... HQL 문이 세션 캐시와 관련하여 SQL 문보다 더 똑똑하다고 생각했습니다. 명백하게. 감사! –

+0

이것은 HQL에도 적용됩니다. 나는 나의 대답을 업데이트했다. –