2011-11-04 4 views
4

데이터베이스 코드에서 Hibernate 네이티브 SQL 쿼리 (삽입, 삭제, 업데이트)를 사용합니다. DB를 HQL로 호출 할 때마다 HQL을 사용할 때 캐시가 켜져 있다는 것을 이해합니다. 그러나 네이티브 SQL 쿼리를 사용하면 어떻게되는지 궁금합니다. 나는 어떤 데이터를 삽입하지만, HQL 쿼리를 사용하여 데이터를 가져 오려고합니다. 삽입 된 데이터도 받게 되나요?Hibernate에서 네이티브 SQL과 HQL을 혼합 할 때의 데이터베이스 상태

힌트가 있습니까?

답변

0

기본 데이터베이스 및 트랜잭션 설정에 따라 달라집니다. 그러나 HQL조차도 원시 SQL로 변환되어 실행됩니다. 동일한 트랜잭션에 머무르는 한 HQL을 통해 원시 SQL로 변경 한 내용을로드 할 수 있습니다. 그러나 HQL은 캐시, 프록시 및 기타 최대 절전 모드로 쿼리를 처리합니다. natiev SQL이이를 완전히 우회하기 때문에 (이상한 모든 문제를 해결할 수 있습니다.) (기본 쿼리의 목적입니다. 모든 최대 절전 모드 항목의 빠른 차선)

0

Konstantin Pribluda의 답변에 덧붙여 나는 반대의 상황에서 Hibernate (심지어 session.save()를 사용하여)를 통해 데이터를 추가 한 다음 네이티브 SQL로 데이터를 가져 오는 것이 네이티브 SQL- 쿼리가 추가 된 데이터를 가져 오지 않는 결과라고 말할 수 있습니다.

DAO에서 다른 유형의 쿼리를 사용할 때 원시 SQL 쿼리를 사용하기 전에 항상 세션을 플러시합니다. 어떤 메소드가 서비스 레이어에 혼합되어 있는지 절대 알지 못합니다.

0

그렇습니다. 모든 DAO 쿼리가 HQL 또는 SQL 중 하나씩 실행되기 때문에 가져올 수 있습니다. 삽입 쿼리가 순서대로 삽입되면 레코드가 삽입됩니다.

관련 문제