java - 这是有效的 EJB-QL 吗?

标签 java jakarta-ee ejb ejbql ejb-2.x

我在 EJB-QL 中的几个 EJB 2.1 查找器方法中有以下构造:

SELECT distinct OBJECT(rd) FROM RequestDetail rd, DetailResponse dr 
      WHERE dr.updateReqResponseParentID is not null 
      and dr.updateReqResponseParentID = ?1 
      and rd.requestDetailID = dr.requestDetailID
      and rd.deleted is null and dr.deleted is null

IDEA 的 EJB-QL 检查标记了两个对象 FROM RequestDetail rd, DetailResponse dr 的使用,检查内容如下:不支持多个范围变量声明,请改用集合成员声明(例如 IN(o.lineItems))

查询本身在 JBoss 4.2 上运行良好(如返回预期结果)。 IDEA 是否都在这里,或者查询是否存在有效问题?这种查询的实际首选替代语法是什么?

编辑:感谢所有回答者的帮助,特别是 Romain。我将此报告为 issue到 JetBrains。

最佳答案

查询没问题 - 看起来像是 IDEA 代码检查器问题。
我找不到针对它记录的任何错误。

如果您有付费版本,您可能需要寻求他们的支持。

我确实发现了一个小问题,在 EJB 2.1 的规范(以及与此相关的所有其他规范)中,它说使用大写字母表示 NULL。

11.2.6.10 空比较表达式
在条件表达式中使用比较运算符 IS NULL 的语法如下: {单值路径表达式 |输入参数}IS [NOT] NULL null 比较表达式测试单值路径表达式或输入参数是否为 NULL 值。

SELECT distinct OBJECT(rd) FROM RequestDetail rd, DetailResponse dr 
      WHERE dr.updateReqResponseParentID IS NOT NULL 
      and dr.updateReqResponseParentID = ?1 
      and rd.requestDetailID = dr.requestDetailID
      and rd.deleted IS NULL and dr.deleted IS NULL

这是 EJB 2.1 规范中与您的查询相匹配的部分...

11.2.5.3 范围变量声明 将标识变量声明为范围变量的 EJB QL 语法与 SQL 类似;可选地,它使用 AS 关键字。

range_variable_declaration::= Abstract_schema_name [AS ] 标识符 与实体 bean 相关的对象或值通常通过使用路径表达式进行导航来获取。然而,导航并不能到达所有对象。范围变量声明允许 Bean 提供者为可能无法通过导航访问的对象指定“根”。 如果 Bean Provider 希望通过比较实体 Bean 抽象模式类型的多个实例来选择值,则在 FROM 子句中需要多个涵盖抽象模式类型的标识变量。

以下查找器方法查询返回数量大于 John Smith 订单数量的订单。此示例说明了 FROM 子句中两个不同标识变量的使用,这两个变量都是抽象模式类型 Order。该查询的 SELECT 子句确定返回数量大于 John Smith 的订单。

SELECT DISTINCT OBJECT(o1)
FROM Order o1, Order o2
WHERE o1.quantity > o2.quantity AND
o2.customer.lastname = ‘Smith’ AND
o2.customer.firstname= ‘John’

关于java - 这是有效的 EJB-QL 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2691645/

相关文章:

java - SQL异常 : No suitable driver found for jdbc:postgresql

java - 重新填充 GridBagLayout 中的空单元格

java - 如何使用FTP(E)S从服务器下载文件?

java - 二进制转换为十进制的输出不是预期的?

java - Hibernate 作为 JPA 提供者是什么意思?

java - 如何使用JSP/Servlet将文件上传到服务器?

java - 在现有 JPA 持久性类中处理更新的策略

java - EJB 事务和 JAX-RS

java - 何时调用 EJB 实体 setter

java - 在 Netbeans 中使用 try-with-resources