【问题标题】:JPQL FROM sectionJPQL FROM 部分
【发布时间】:2021-08-27 04:05:50
【问题描述】:

我想优化数据库中的查询数量。目前,在 REST 上,设备列表出现了。需要检查是否添加了新设备。现在它的工作方式如下:从数据库中选择当前用户的所有设备,并检查(从请求中收到列表)是否存在新设备。我想将所有工作翻译成数据库并执行以下操作:

select p 
from :firstParam p 
where p.sdauId NOT IN (select t.id 
                       from Equipment t 
                       where t.owner.id = :secondParam)

Param ":firstParam" 是从请求中接收到的设备列表。 ":secondParam" 是一个用户 ID。

我可以这样使用“来自”部分吗?在阅读了文档并多次尝试提出类似请求后,没有任何结果。如果有任何关于编写请求或解决此类问题的方法的提示,我将不胜感激。

【问题讨论】:

    标签: java jpa jpql


    【解决方案1】:

    数据库对象名称(例如数据库、表、列名)不能在准备好的语句中使用占位符进行绑定。因此,您必须硬编码第一个表的名称:

    select p
    from yourTable p    -- cannot use a parameter for table names
    where p.sdauId NOT IN (select t.id from Equipment t where t.owner.id = :secondParam)
    

    【讨论】:

    • 作为第一个参数,我要传输实体列表。但这可能是不可能的。我从逻辑开始,如果“from”部分可以有嵌套查询,那么您可能可以传递实体列表
    • 如果您认为有必要这样做,请重新考虑您的设计和方法。
    猜你喜欢
    • 2012-06-27
    • 2014-10-30
    • 2017-01-19
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 2012-05-28
    • 2021-08-19
    • 2016-09-07
    相关资源
    最近更新 更多