JPA/JPQL:SELECT 子句中不允许使用 AS 标识符

2024-04-08

我有一个非常复杂的 JPQL 查询,其形式为

  SELECT NEW com.domain.project.view.StandingsStatLine(
      ro.id                                                                                                 AS rid
    , cl.name                                                                                               AS team
    , te.ordinalNbr + 1                                                                                     AS nr
    , pa.wasWithdrawn                                                                                       AS wd

    , SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore IS NOT NULL THEN 1 ELSE 0 END)                                           AS g
    , SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore > sca.finalScore THEN 1 ELSE 0 END)                                      AS w
    , SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore < sca.finalScore THEN 1 ELSE 0 END)                                      AS l
    , SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore = 20 AND sca.finalScore =  0 THEN 1 ELSE 0 END)                          AS wbr
    , SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore =  0 AND sca.finalScore = 20 THEN 1 ELSE 0 END)                          AS lbr
    , SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore =  0 AND sca.finalScore =  0 THEN 1 ELSE 0 END)                          AS blbr

    , SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore > sca.finalScore THEN 1 ELSE 0 END)
      + SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore IS NOT NULL THEN 1 ELSE 0 END)
      - SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore = 0 AND sca.finalScore = 20 THEN 1 ELSE 0 END)                         AS rp
    , CASE WHEN (  SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore > sca.finalScore THEN 1 ELSE 0 END)
                 + SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore IS NOT NULL THEN 1 ELSE 0 END)
                 - SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore = 0 AND sca.finalScore = 20 THEN 1 ELSE 0 END)
                 - SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore IS NOT NULL THEN 1 ELSE 0 END))
                   / SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore IS NOT NULL THEN 1.0 ELSE 0.0 END) >= 0.0
           THEN ((  SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore > sca.finalScore THEN 1 ELSE 0 END)
                 + SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore IS NOT NULL THEN 1 ELSE 0 END)
                 - SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore = 0 AND sca.finalScore = 20 THEN 1 ELSE 0 END)
                 - SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore IS NOT NULL THEN 1 ELSE 0 END))
                   / SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore IS NOT NULL THEN 1.0 ELSE 0.0 END))
           ELSE 0.0 END                                                                                                                                               AS nrp
    , CASE WHEN SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore IS NOT NULL THEN 1 ELSE 0 END) > 0
           THEN  (SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore > sca.finalScore THEN 1.0 ELSE 0.0 END)
                / SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore IS NOT NULL THEN 1 ELSE 0 END))
           ELSE NULL END                                                                                                                                              AS wperc

    , SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore IS NOT NULL THEN scf.finalScore ELSE 0 END)                              AS ptsf
    , SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND sca.finalScore IS NOT NULL THEN sca.finalScore ELSE 0 END)                              AS ptsa

    , MAX(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore NOT IN (0, 20) THEN scf.finalScore ELSE NULL END)                        AS hi
    , MAX(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore NOT IN (0, 20) THEN scf.game.id ELSE NULL END)                           AS higid
    , MIN(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore NOT IN (0, 20) THEN scf.finalScore ELSE NULL END)                        AS lo
    , MIN(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore NOT IN (0, 20) THEN scf.game.id ELSE NULL END)                           AS logid
    )
  FROM Club cl
    JOIN cl.teams te
    JOIN te.rosters ro
    JOIN ro.season se
    JOIN ro.participations pa
    JOIN pa.group gr
    JOIN gr.round rd
    JOIN rd.subCompetition sc
    JOIN sc.competition cn
    JOIN gr.games ga
    JOIN ga.scores scf
    JOIN ga.scores sca
    JOIN scf.roster rof
    JOIN sca.roster roa
    JOIN rof.participations paf
    JOIN roa.participations paa
  WHERE ...
  GROUP BY ...
  ORDER BY pa.wasWithdrawn, nrp DESC, w DESC, lbr, g DESC, cl.shorthand

使用 Hibernate 4.x 运行它不会出现任何问题,但是 Eclipse Dali 在构造函数表达式的几乎每一行上都显示 JPQL 错误。删除... AS <identifier>摆脱这些错误。

我查看了 JPQL BNFhttp://en.wikibooks.org/wiki/Java_Persistence/JPQL_BNF http://en.wikibooks.org/wiki/Java_Persistence/JPQL_BNF在这里,但我找不到AS在 SELECT 子句层次结构中。

Q's:

这是 Hibernate 特定的语法吗?

为什么 JPQL 不支持这个?

有时表达式可能变得非常复杂,我想通过以下方式记录该表达式的实际含义:AS子句,特别是考虑到 JPQL 没有注释功能。恕我直言,这是 JPQL 的一个真正的缺陷。

此外,Hibernate 允许我参考这些ASes 中的ORDER BY子句,它允许我重用上面的复杂语句。

也许我的表达可以缩短,但在其他案例/项目中复杂性仍然很高。

Thanks


找到了。

根据 JPQL BNF 的数据http://en.wikibooks.org/wiki/Java_Persistence/JPQL_BNF#New_in_JPA_2.0 http://en.wikibooks.org/wiki/Java_Persistence/JPQL_BNF#New_in_JPA_2.0JPA 2.0 应该支持这一点。请注意,倒数第二个示例。

这几乎回答了为什么 Eclipse Dali 显示 JPQL 验证错误的原始问题。看来大理有问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPA/JPQL:SELECT 子句中不允许使用 AS 标识符 的相关文章

  • 条件查询:按计数排序

    我正在尝试执行一个标准查询 该查询返回 stackoverflow 中回答最多的问题 例如常见问题解答 一个问题包含多个答案 我正在尝试使用标准查询返回按每个问题的答案数排序的回答最多的问题 任何人都知道我应该在 hibernate cri
  • MyISAM 方言生成错误的 DDL

    我们使用 MyISAM 方言org hibernate dialect MySQLMyISAMDialect使用JPA2自动生成DDL文件3 6 9 FinalMySQL 5 5 数据库上的 hibernate 提供程序 The creat
  • Java/Hibernate - 异常:内部连接池已达到其最大大小,当前没有可用的连接

    我第一次在大学项目中使用 Hibernate 而且我还是个新手 我想我遵循了我的教授和我阅读的一些教程给出的所有指示 但我不断收到标题中的异常 Exception in thread main org hibernate Hibernate
  • 在 JavaFX 中搜索 TableView 列表

    如何在 TableWie 中查找记录 例如通过 ID 并选择创建的行并将其放在 Java 8 JavaFX 中的屏幕中间 您可以使用以下方式搜索元素 int searchId table getItems stream filter ite
  • 如何在 JPQL 或 HQL 中进行限制查询?

    在 Hibernate 3 中 有没有办法在 HQL 中执行相当于以下 MySQL 限制的操作 select from a table order by a table column desc limit 0 20 如果可能的话 我不想使用
  • hibernate 6.0.2.Final 和 spring boot 2.7.0 的entityManagerFactory bean 未配置问题

    所以最近我想升级我的 Spring Boot 项目项目的一些依赖项 特别是这些组件 雅加达 EE 9 弹簧靴2 7 休眠 6 0 2 Final 完成此操作后 所有更新和代码折射 更新将 javax 导入到 jakarta 以及一些 hib
  • 每行中非空列的计数

    我有一个包含 4 列的表 在第 5 列中我想存储前 4 列中有多少个非空列的计数 例如 其中 X 是任意值 Column1 Column2 Column3 Column4 Count X X NULL X 3 NULL NULL X X 2
  • 让 Hibernate 和 SQL Server 与 VARCHAR 和 NVARCHAR 良好配合

    我目前正在大型数据库的某些表中启用 UTF 8 字符 这些表已经是 MS SQL 类型 NVARCHAR 此外 我还有几个使用 VARCHAR 的字段 Hibernate 与 JDBC 驱动程序的交互存在一个众所周知的问题 例如 参见在 h
  • spring data jpa复合键重复键记录插入导致更新

    我有一个具有复合键的实体 我试图通过使用 spring data jpa 存储库到 mysql 数据库来持久化它 如下所示 Embeddable public class MobileVerificationKey implements S
  • 实体类的重建

    我尝试在 netbeans 8 0 1 上运行带有 hibernate spring 和 jpa 的 Web 应用程序 但现在我在编译应用程序时遇到了这个异常 以下是错误 Failed to execute goal org apache
  • JPA 中的复合键

    我想创建一个具有自动生成的主键的实体 而且还有一个由其他两个字段组成的唯一复合键 我如何在 JPA 中执行此操作 我想这样做是因为主键应该用作另一个表中的外键 并且使其复合并不好 在下面的代码片段中 我需要命令和模型是唯一的 pk当然是主键
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • SQL Server - 将行连接到逗号分隔的列表中

    假设我有一个临时表 如下所示 Id Value 1 1 1 2 1 3 2 1 2 2 我希望我的桌子是这样的 Id ValueList 1 1 2 3 2 1 2 所以基本上我需要将我的值分组为逗号分隔的列表 我已经尝试过以下操作 SEL
  • Hibernate + MySQL + rewriteBatchedStatements=true

    我有以下 Hibernate 配置
  • 何时在 mysql 中使用 Union [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 对于 Union 您会在什么现实情况下使用它 因为对我来说 对具有不同列用途 含义的两个表中的两个选择查询使用联合是没有意义的 例如
  • TransientObjectException - 对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例

    对于我的问题 我遇到了一些可能的好答案 但这是关于从 Hibernate 3 4 0GA 升级到 Hibernate 4 1 8 的问题 所以这曾经在以前的版本下工作 我已经四处搜索为什么它在这个新版本中中断 I get a org hib
  • 从现有数据库模式生成 Hibernate hbm xml 文件和实体类

    如何从现有数据库模式生成 Hibernate hbm xml 文件和实体类 我非常高兴地使用了 Hibernate Tools 其网站上给出的示例 下面 我将详细介绍我的具体 高级和有趣的 我认为 用例 实际上 我在我们的大项目中面临着一个
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • 使用 Flyway 和 Hibernate 的 hbm2ddl 在应用程序的生命周期中管理数据库模式

    我正在开发 Spring Hibernate MySql 应用程序 该应用程序尚未投入生产 我目前使用 Hibernatehbm2ddl该功能对于管理域上的更改非常方便 我也打算用Flyway用于数据库迁移 在未来的某个时候 该应用程序将首
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User

随机推荐

  • request.getSession() 在 sendRedirect() 之后创建新会话

    我们正在开发旅行应用程序 通过这个航班 可以预订酒店 巴士票 它是基于产品的应用程序 我们有近 25 个客户 3 个客户正在使用 其余仍在开发中 我们为所有客户维护一台服务器 一台服务器 应用程序 多个客户端是我的应用程序中的伟大成就 但问
  • 使用 jq 将 JSON 对象转换为 Prometheus 指标格式

    考虑一个 JSON 对象 例如 foo 42 baz 12 bar label1 value1 12 34 建造者jq https github com stedolan jq使用一些数据源 实际的键名称及其数量可能会有所不同 但结果将始终
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • 在Python中的同一个图上绘制多个位置的年度数据[重复]

    这个问题在这里已经有答案了 我有几个站 20 年的数据框 我想以某种方式绘制它 x 轴是年份 y 轴是观测值 线条的颜色显示位置 station year observations 0 3939 2000 0 346518 1 3939 2
  • 通过 UDF 获取 Google 搜索第一个结果[重复]

    这个问题在这里已经有答案了 Santosh 对以下问题有一个很棒的答案 vba 代码 link https stackoverflow com questions 17495644 using vba in excel to google
  • 将 .NET 事件公开给 COM?

    我一直在尝试向 VBA 客户端公开并触发事件 到目前为止 在 VBA 客户端 事件已公开 并且我看到方法事件处理方法已添加到我的模块类中 但是 VBA 事件处理方法不会触发 由于某种原因 调试时事件为空 同步修改我的代码也没有帮助 作为记录
  • 文件锁如何工作?

    我一直在尝试使用FileLock获得对文件的独占访问权限 以便 删除它 重命名它 写信给它 因为在 Windows 上 至少 您似乎无法删除 重命名或写入已在使用的文件 我写的代码看起来像这样 import java io File imp
  • Spring security 已登录用户的重定向问题

    在使用我的基于 GWT 的 Web 应用程序实现 Spring Security 时 我找到 一切都按预期正常工作 除了以下事实 我打开了 login jsp 并给出了有效的用户登录凭据 提交后 成功重定向到主页 现在 当我在地址栏中编辑
  • 电子关闭按钮不起作用

    我正在尝试使用 Electron 以前称为 Atom Shell 创建一个应用程序 该应用程序包装了 AngularJS 应用程序 并与在 Node js 中创建的端点交互以编辑和保存 HTML 内容 我能够毫无问题地创建应用程序 当我尝试
  • glEnableClientState 和 glEnableVertexAttribArray

    后者是否贬低前者 我正在编写希望在着色器 2 0 硬件上工作的代码 但我想使用更新的编程约定 例如 VAO 所以我一直在使用glVertexAttribPointer函数而不是glVertexPointer glNormalPointer
  • 强制 ListView 的 onSizeChanged

    我有一个列表视图 它动态分配不同的数据集 这很好用 我还使 fastScrollEnabled 为 true 为了更新sectionIndexer 我需要调用 list setFastScrollEnabled false list set
  • 如何禁用 Jupyter 笔记本会话的密码请求?

    多年来我一直使用以下命令启动 Jupyter Notebook jupyter notebook port 7000 no browser no mathjax 当我尝试在浏览器上打开 jupyter 时 它会要求我输入密码 即使我以前从未
  • 在自动布局世界中正确调整 NSWindow 大小

    我在使用自动布局滚动视图调整垂直窗口大小时遇到 问题 我想要的是 我想尽可能地复制我的应用程序当前的窗口大小调整行为 窗口的宽度是灵活的 但窗口的高度通常应跟踪内容的高度 具体来说 通常 窗口会自动调整其高度以精确调整匹配其内容 2 除外
  • 如何将多个变量从 Excel 文件传递​​到批处理文件

    我目前可以使用以下命令将一个参数从 Excel 文件传递 到批处理文件 filepath C Users agaron Desktop batchmaster batchfiles batchfiletest bat month 然后调用
  • PHP 方法链接混乱

    我最近接触了方法链接 并且不确定我在这里所做的是否非法 或者我做错了 我有一个数据库类 例如 class Database private connection private resultset last query current ro
  • 使用带有当前时间的随机数生成器与不使用随机数生成器

    我想了解使用随机数生成器与System currentTimeMillis 作为种子并仅使用默认构造函数 也就是说 这之间有什么区别 Random rand new Random System currentTimeMillis 和这个 R
  • Web 服务器不读取 .htaccess 文件

    我安装了 Ubuntu 12 10 并安装了 apache2 但我的 htaccess 文件无法正常工作 我将其设置为在链接中不能包含 php 文件扩展名 因此看起来像 www website com login 而不是 login php
  • 使用 sidekiq 处理两个独立的 Redis 实例?

    下午好 我有两个独立但相关的应用程序 他们都应该有自己的后台队列 阅读 单独的 Sidekiq 和 Redis 进程 然而 我希望偶尔能够将工作推给app2的队列来自app1 从简单的队列 推送的角度来看 如果app1没有现有的 Sidek
  • SAPUI5自定义伪事件

    在 SAPUI5 OpenUI5 中定义自定义伪事件的最佳实践是什么 例如 假设我想在按住扩展的 sap m Button 几秒钟时触发一个事件 我不确定是否还有任何 最佳实践 我真的认为只有 一种 实践 但我渴望学习任何其他做法 所以如果
  • JPA/JPQL:SELECT 子句中不允许使用 AS 标识符

    我有一个非常复杂的 JPQL 查询 其形式为 SELECT NEW com domain project view StandingsStatLine ro id AS rid cl name AS team te ordinalNbr 1