【问题标题】:How does this SQL query translate to JPQL?此 SQL 查询如何转换为 JPQL?
【发布时间】:2011-07-05 19:24:46
【问题描述】:

我正在尝试习惯 JPQL,但我已经陷入困境。这是怎么回事:

SELECT * FROM Table_a INNER JOIN Table_b USING (Table_bID) Where Table_b.Column_a LIKE 'somestring'

翻译成 JPQL ?我将非常感谢任何帮助。

【问题讨论】:

    标签: mysql sql jpql


    【解决方案1】:
    select a from EntityMappedToTableA 
    inner join fetch a.entityMappedToTableB b
    where b.fieldMappedOnColumnA like :someString
    

    为此,您必须具有从 EntityMappedToTableA 到 EntityMappedToTableB 的关系(我假设它是 ManyToOne,因为表 A 中似乎有几行具有表 B 的 ID):

    @Entity
    public class EntityMappedToTableA {
        @ManyToOne
        @JoinColumn(name = "Table_bID")
        private EntityMappedToTableB entityMappedToTableB;
    
        // ...
    }
    

    【讨论】:

    • 我的映射是`@JoinColumn(name = "VaterID", referencedColumnName = "VaterID") @ManyToOne private Vaeter vaeter;. createQuery("SELECT k FROM Kinder k INNER JOIN FETCH k.vaeter WHERE k.vaterName LIKE :vname");` 是查询。这样做我得到一个例外,其中“类 [kms3.entities.Kinder] 的未知状态或关联字段 [vaterName]。”正如我所看到的,我试图在实体“Kinder”而不是实体“Vaeter”中读取“vaterName”。是查询错误还是映射错误?
    • 查询有误。我误读了您的 SQL 查询并在翻译中出错。我会修正我的答案。
    • 感谢您的快速回复,但仍然无法正常工作。我尝试过以下操作:“SELECT k FROM Kinder k INNER JOIN FETCH k.vaeter vat WHERE vat.vaterName LIKE :vname”,但我在“未知令牌增值税”上遇到异常。如果没有别名“vat”,它就找不到 vaterName。我对这个 join fetch 业务的理解存在重大缺陷。
    • 好的,我知道了。这次“获取”实际上是错误。有效的代码是“从 EntityMappedToTableA 内部连接 ​​a.entityMappedToTableB b 中选择 a,其中 b.fieldMappedOnColumnA 像:someString”。感谢您的帮助。
    猜你喜欢
    • 2021-10-09
    • 2017-10-29
    • 2013-09-17
    • 2018-10-29
    • 1970-01-01
    • 2014-01-17
    • 2016-07-06
    • 2021-01-22
    • 2011-09-29
    相关资源
    最近更新 更多