2013-06-19 128 views
0
SELECT * 
FROM (SELECT van_num    vn, 
       berth_from    berth, 
       first_line_ashore_time first 
     FROM iportman.ipt_pilotagerecord pilot 
     WHERE (Month(first_line_ashore_time) = 6 
       AND Year(first_line_ashore_time) = 2013) 
       AND operation_movement = 'BERTHING') tab1 
     LEFT JOIN (SELECT van_num   vn, 
         berth_from   berth, 
         last_line_cast_off last 
        FROM iportman.ipt_pilotagerecord pilot 
        WHERE (Month(last_line_cast_off) = 6 
          AND Year(last_line_cast_off) = 2013) 
         AND operation_movement = 'UNBERTHING') tab2 
       ON tab1.vn = tab2.vn 

我想在JPQL中執行上述查詢。我們正在使用JPA 2.0(Eclipselink 2.4.2)。 請幫我將SQL查詢轉換爲JPQL。對JPQL的SQL查詢

在此先感謝

+0

子查詢只允許在JPQL的'SELECT'和'WHERE'子句中使用。因此,不太可能將此SQL直接轉換爲JPQL。 – Lion

+0

請給我建議其他的替代方案 –

+0

我想,你可能想要在你使用的任何數據庫系統中創建一個視圖,它可以獲取所需的結果集(也就是說你可以直接在該視圖中編寫這個SQL),然後通過查詢這個視圖JPQL。 – Lion

回答

1

請注意,JPA允許您執行本機SQL查詢。對於這樣複雜的事情來說,這可能是最好的。

否則,您需要根據對象而不是數據來思考,什麼是對象模型,以及您想要返回哪個對象?首先用英文寫查詢,然後從那裏開始。

JPA規範不允許在from子句中進行子選擇,儘管EclipseLink確實對此有一些支持。不確定你的查詢是否真的需要這樣做,它似乎比它需要的複雜得多。