2012-01-26 8 views
0

나는 너희들이 나를 용서하기를 바란다 ... 나는 이것이 단순하지만 Google에 불가능하다는 것을 알고있다.Hibernate hql create 'Any'query

나는 다음과 같은 HQL 쿼리를 작성하려는 : "사람의 인스턴스가 이름이 있는가 = '밥'"

는 내가 수를 할 수있는 알고 있지만 불필요하게 처리 능력 때를 씹을 것 같은이 보인다 실제로 모든 행을 열거 할 필요는 없습니다.

이것을 수행하는 hql 쿼리는 무엇입니까?

답변

1
Query personsQuery = session.createQuery("from Person p where p.name = 'Bob'"); 
if(personsQuery.iterate().hasNext()) { 
    //there is at least one Bob 
} 

사람의 기본 키만 메모리에로드됩니다.

또는

ScrollableResultSet scroll = session.createQuery("from Person p where p.name = 'Bob'").scroll(); 

if(scroll.next()) { 
    //there is at least one Bob 
} 

scroll.close(); 

아무것도 메모리에로드되지 않으며, 단지 데이터베이스 커서가 열립니다.

+0

아무 것도 메모리에로드되지 않지만 DB에서 실행되는 전체 쿼리입니까? 2 억 개의 행이 있다고 가정 해보십시오. 모든 행을 확인하거나 반복 할 때까지 반복 할 필요가 있습니까? 서버에 "나는 단지 첫 번째 결과 만 원한다"는 것을 나타낼 수 있어야합니다. 또한 커서는 SQL Server에서 실제로 지원됩니까? MySQL은? –

+1

최대 절전 모드의 시점에서 할 수있는 최대 값입니다. MySQL은, 커서를 지원, 나는 지금 SQL Server에 대해하지 않습니다. 데이터베이스 레벨에서 일어나는 일은 쿼리가 어떻게 실행되는지는 데이터베이스에 따라 다릅니다. MySQL의 경우에만 가장 좋은 해결책은 다음과 같습니다. http://stackoverflow.com/questions/1676551/best-way-to-test-if-a-row-exists-in-a-mysql-table – dcernahoschi

+0

음 .. 또한 방금 setMaxResults 메서드를 찾았는데 ... 제한 쿼리/서버가 지원하는 모든 변환 할 경우 궁금하다 –