2017-09-18 61 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 
) 

也没必要“地图”两个实体,因为不存在一个。