2012-04-04 7 views
0

OpenJPA를 사용하여 다시 만들려고하는 Oracle 쿼리입니다. Websphere 통합 개발자에게 서비스를 작성하고 OpenJPA를 ORM 도구로 사용하고 있습니다. 이전에이 쿼리는 저장 프로 시저를 사용하여 수행되었으며 참조 커서가 사용되었고 정보는 이와 같이 검색되었습니다. 이제 OpenJPA를 선택 도구로 사용하려고합니다. 그래서OpenJPA를 사용하여 쿼리 다시 생성

SELECT DISTINCT 
    P.col1 as ID, 
    P.col2, 
    P.col3, 
    P.col4, 
    P.col5, 
    S.col6, 
    PC.col7, 
    P.col8, 
    A.ADDRESS_1, 
    A.ADDRESS_2, 
    A.ADDRESS_3, 
    A.CITY, 
    A.COUNTY, 
    A.STATE, 
    A.ZIP_CODE, 
    P.CONFIRMED_BY, 
    P.CONFIRMED_DATE, 
    P.MOD_USERID, 
    P.MOD_DATE 
FROM EPCD13.PROVIDER P, EPCD13.provider_channel PC, EPCD13.provider_channel_link pcl, 
    EPCD13.provider_specialty ps, EPCD13.SPECIALTY S, EPCD13.Address A, EPCD13.ADDRESS_LINK AL 
WHERE P.RESOURCE_ID = personID 
    AND P.RESOURCE_ID = PS.RESOURCE_ID (+) 
    AND 1 = PS.PRIMARY_SPECIALTY_ID (+) 
    AND PS.SPECIALTY_ID = S.SPECIALTY_ID (+) 
    AND P.RESOURCE_ID = PCL.RESOURCE_ID (+) 
    AND PCL.PROVIDER_CHANNEL_ID = PC.PROVIDER_CHANNEL_ID 
    AND 1 = PCL.PREFERENCE (+) 
    AND 9 = pc.channel_type_id (+) 
    AND PC.CHANNEL_ADDRESS NOT LIKE '%@%' 
    AND P.RESOURCE_ID = AL.RESOURCE_ID (+) 
    AND AL.ADDRESS_ID = A.ADDRESS_ID (+) 
    AND 1 = A.ADDRESS_TYPE_ID (+) 
    AND 1 = AL.PREFERENCE (+); 

주의 모든 내부 등 조인하고 ... 그때는 OpenJPA를 사용하여 저장된 프로 시저를 재구성해야한다고 생각하고있다. 위와 같은 결과를 반환하는 내 메서드에 명명 된 쿼리를 넣는 것을 지금 생각하고 있습니다. 당신이 주목할 수 있듯이, 거기에 호출되고 여러 가지 시점에서 합류하는 여러 테이블이 있습니다 ... 난 그냥이 쿼리를 사소한 변경 createNamedQuery() 함수에 넣어 수 있다고 생각 ...하지만 거기에 생각하고있다 이 작업을 수행하는 더 간단한 방법이 될까요? 아마. JPA를 사용하여 저장된 proc을 호출 할 수 있습니까?

답변

1

SQL이 매우 복잡하므로 JPQL로 변환하기가 쉽지 않으므로 보존하는 것이 좋습니다. SQL 쿼리를 수행 할 수있는 OpenJPA의 NativeQuery를 사용할 수 있습니다. SQL을 SELECT로 시작하지 않으면 저장된 프로 시저로 처리됩니다.