2011-07-28 7 views
1

두 테이블 행의 함수를 계산하는 SQL 뷰를 만들었습니다. 최대 절전 쿼리의 출력을 제한하기 위해 뷰를 사용하고 싶지만이를 수행하는 가장 좋은 방법은 확실하지 않습니다.Hibernate 쿼리에서 SQL 뷰와 어떻게 조인 할 수 있습니까?

SELECT Thing t1 
INNER JOIN Thing t2 ... 
INNER JOIN ... 
INNER JOIN f_view v ON v.a_id = t1.id AND v.b_id = t2.id 
WHERE t2.id = ? AND ... AND v.f < ? 

그것이 합리적인 하이버 네이트 이러한 뷰를 사용하는 것입니다

CREATE FUNCTION f(ax, ay, bx, by) AS ... ; 

CREATE VIEW f_view AS 
    SELECT a.id a_id, b.id b_id, f(a.x, a.y, b.x, b.y) f FROM thing a, thing b; 

지금 나는이 SQL 쿼리와 유사한 최대 절전 모드 쿼리를 작성하려면 :

보기는 저장 기능을 캡슐화 질문? 여기

답변

1

유일한 옵션은 다음과 같습니다

  1. 지도 f_view 최대 절전 모드에서 (가장 가능성이 불변) 엔티티로 - 당신이 다음 HQL 쿼리에 포함 할 수 있습니다.

  2. 대신 SQL로 쿼리를 작성하고 그 결과를 (관리되는 또는 관리되지 않는) 엔터티에 매핑하십시오. Hibernate 레퍼런스의 Chapter 18은 여기에 모든 가능성을 문서화한다.

+0

감사합니다. 나는 그것이 두려웠다. 질문을하기 전에 옵션 2를 택했는데 작동하지만 추한 것입니다. 나는 뷰를 매핑하는 것을 고려했으나 뷰 행에 대한 id에 대해 무엇을해야할지 모른다. –

+0

@kevin'a_id' /'b_id' 조합은보기 내에서 유일합니까? 그렇다면 복합 식별자로 매핑 할 수 있습니다. 그렇지 않다면,'f_view'가 둘다 불변이고 Hibernate에 의해 직접적으로 검색되지 않는 한 (예를 들어, 조인에서만 사용됨) 당신은 실제로 중복 된 ID로 빠져 나갈 수있는 한 거기에'f'를 던질 수 있습니다. – ChssPly76

+0

예, 고유합니다. 나는 그 접근법도 고려했다. 나는 그것을 시도 할 것이다. –

관련 문제