2012-09-27 60 views
1

我有一個courier_routes表,它有兩個外鍵到一個位置表。 courier_routes表中的列是start_location_id和end_location_id。 (我正在使用Oracle)JPA中的多列不一致

我想查找courier_routes表中所有不同的位置信息。

考慮這個例子

|id |start_location_id| end_location_id|... 
|1|1|2| 
|2|1|3| 
|3|4|5| 
|4|2|1| 

我想找回ID爲1 2 3 4 5

我的SQL的作品是

SELECT loc FROM (
SELECT start_location_id AS loc FROM courier_routes 
UNION 
SELECT end_location_id AS loc FROM courier_routes); 

我想翻譯成JPA這一點。 Hibernate不支持工會,所以我想到做子查詢。問題在於它可能會影響性能。

我想的是像(僞代碼...)

SELECT id FROM locations where id in (
    (SELECT start_location_id FROM courier_routes) 
     OR 
    (SELECT end_location_id FROM courier_routes)); 

是否有更簡單的方法?這張表會變大,所以我真的不想使用子查詢。

我應該通過在一個集合中添加兩個單獨的查詢結果來在java中進行聯合嗎?

感謝

+0

我會測量每個這些解決方案所花費的時間(包括使用本機SQL查詢的解決方案),並選擇最佳的解決方案。我猜想最後一個建議的解決方案(兩個查詢)是Oracle在涉及兩個子查詢的查詢時會自行完成的。 –

回答

0

你可以在HQL兩列的連接:

SELECT distinct loc.id FROM locations loc, courier_routes c 
    where loc.id=c.start_location_id OR c.id=c.end_location_id 

希望這有助於!