2017-09-18 309 views
0

我有一個用例需要IN子句應用於兩個表。休眠彈簧數據Jpa

這兩個表不是通過外鍵約束相關的,也不是任何一個列的值都相同,因此查詢使用CONCAT。

本機查詢,因此,看起來是這樣的:

SELECT A.requiredColumn from A, B WHERE colA LIKE CONCAT(colB, 'FOR_COMPARISON');  

要做到在Spring數據JPA一個加入這個樣子,我不知道是有辦法做到明確映射,因爲列不完全「等於」。這些都是我研究的主題:

Selecting from Multiple Tables in Spring Data

Joining two table entities in Spring Data JPA

我申請了Spring數據JPA相當於IN子句爲低於本地:

SELECT A.requiredColumn 
from A 
where colA in (
    select CONCAT(colB, 'FOR_COMPARISON') 
    from B);  

爲:

SELECT a 
from A 
WHERE colA in (
    select concat(
     trim(colB), 'FOR_COMPARISON') 
     from B 
    ); 

但是,這導致:

QuerySyntaxException:期待CLOSE '從' 接近1號線發現,列134

是否有任何想法解決這個問題呢?

+0

看起來你可能會遺漏右括號 –

+0

謝謝@ jonathan.ihm,即複製/粘貼錯誤。語法很好。 – barsakus

+0

然後請用您使用的實際陳述更新問題。因爲這個錯誤看起來就像人們希望從失蹤的夥伴那裏得到的那樣。 –

回答

-1

我探索的另一個選擇是使用NamedQuery。但是,似乎我過於複雜的事情。

修正了JPQL是這樣的:

select p 
from EntityA p 
WHERE p.colA IN (
    select concat(trim(i.colB), '_APPEND_FOR_EQUALITY') 
    from EntityB i 
    WHERE i.totallyDifferentCol = :inputMe 
) 

也沒必要「地圖」兩個實體,因爲不存在一個。