【问题标题】:Hibernate Spring Data Jpa休眠 Spring Data Jpa
【发布时间】:2017-09-18 17:00:10
【问题描述】:

我有一个用例需要为两个表应用 IN 子句。

这两个表不通过外键约束关联,任何一个列的值也不相同,因此为了进行映射,查询使用了 CONCAT。

因此,本机查询看起来像这样:

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

要在 Spring data JPA 中进行这样的连接,我不确定是否有办法进行显式映射,因为列并不完全“相等”。这些是我研究过的线程:

Selecting from Multiple Tables in Spring Data

Joining two table entities in Spring Data JPA

我为以下原生应用了相当于 IN 子句的 Spring data JPA:

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 列附近找到“来自”

有什么想法可以解决这个问题吗?

【问题讨论】:

  • 看起来您可能缺少右括号
  • 感谢@jonathan.ihm,这是复制/粘贴错误。语法很好。
  • 那么请用您使用的实际语句更新问题。因为错误看起来就像人们对缺少的括号所期望的那样。
  • @JensSchauder 同意,我现在更新了查询以反映已经存在的正确语法。为混乱道歉。

标签: hibernate jpa


【解决方案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
)

不需要“映射”这两个实体,因为不存在一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 2016-05-03
    • 2012-07-30
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    相关资源
    最近更新 更多