2014-01-19 2 views
2

나는는 최대 절전 모드 다형성 쿼리

7.2.3 다형성 우리는 객체 지향 쿼리 언어로 HQL을 설명 를 조회 7 장에서 다음 섹션을 통해 온, 그래서해야 다형성 쿼리를 지원합니다. 즉, 클래스의 인스턴스 및 해당 서브 클래스의 모든 인스턴스를 각각 쿼리합니다. 당신은 이미 우리가 이것을 증명할 수있는 충분한 HQL을 알고 있습니다.

BillingDetails

이 쿼리는 추상 클래스 타입 BillingDetails의 객체를 반환에서 다음 쿼리를 고려하십시오. 따라서이 경우 구체적인 개체는 BillingDetails의 하위 유형 인 CreditCard 및 BankAccount입니다. 우리는 특정 서브 클래스의 인스턴스를 원하는 경우에, 우리는 크레딧 카드

에서

을 사용할 수 있습니다

절에서에 명명 된 클래스는 매핑 영속 클래스 일 필요는 없습니다; 어떤 수업이든 할 것입니다. 다음 쿼리는 모든 영속 객체 반환 java.io.Serializable을

에서

: java.lang.Object 상위 물론

에서

을,이 또한 작동 인터페이스 -이 쿼리는 모든 직렬화 영속 객체를 반환

조건 쿼리는 다형성도 지원합니다.

session.createCriteria (BillingDetails.class) .list();

이 쿼리는 BillingDetails 및 해당 하위 클래스의 인스턴스를 반환합니다. 마찬가지로 다음 조건 쿼리는 모든 영구 객체를 반환합니다.

session.createCriteria (java.lang.Object.class) .list();

다형성은 from 절에서 명시 적으로 명명 된 클래스뿐만 아니라 나중에 볼 수 있듯이 다형성 연결에도 적용됩니다.

질문 : 다형성 쿼리의 사용법은 무엇입니까? 언제, 어떻게 사용되는지.

+1

게시 한 내용에서 분명하지 않습니까? 유형이 무엇이든 (신용 카드 또는 은행 계좌) 모든 청구 세부 정보를 원한다면 구체적인 하위 클래스마다 하나의 w-query를 발행 할 필요가 없습니다. BillingDetails를 선택하는 단일 쿼리로 충분합니다. –

답변

-2

자바 비트는 다형성 쿼리에 대한 좋은 대답을 게시했습니다.

http://javabeat.net/implicit-polymorphism-hibernate/

업데이트 : 내 나쁜, 여기 간다, 그들은 다형성 쿼리를 설명하기 위해 예를 사용하는 것을 언급하는 것을 잊었다 :

우리는 두 개의 클래스가 CreditCardPayment 및 DebitCardPayment 그들 모두가 있다고 가정 지불 수퍼 클래스를 확장하고 클래스 당 테이블 전략이 사용되었으므로이 세 클래스 각각은 데이터베이스에 자체 테이블을 갖습니다. 어떤 시점에서, 우리가 현금이나 카드를 통해 이루어진 모든 지불 목록을 검색하고자한다면, 아래 쿼리는 마술을 할 것입니다.

session.createCriteria (Payment.class).명부();

이 기준에 쿼리를 처리하는 동안, 다음과 같은 작업을 수행 최대 절전 모드 -로 모든 쿼리의 결과를 결합

테이블 의 모든 모든 테이블에 화재 개별 쿼리를 매핑 된 지불의 모든 서브 클래스를, 확인을 최대 절전 모드 레이어에서 반환 및 반환

비록 내부적으로는하지만 내부적으로는 수행하지만 두 가지 카드 유형의 모든 데이터를 가져 오기 위해서는 하나의 쿼리 만 있으면됩니다. 따라서 hql에 사용 된 쿼리는 다형성을 갖습니다.