2

我在 EJB-QL 中有以下几个 EJB 2.1 finder 方法:

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使用,检查表明:Several ranged variable declarations are not supported, use collection member declarations instead (e.g. IN(o.lineItems))

查询本身在 JBoss 4.2 上运行良好(作为返回预期结果)。IDEA 是不是全都湿了,还是查询存在有效问题?这种查询的实际首选替代语法是什么?

编辑:感谢所有回答者的帮助,尤其是罗曼。我将此作为问题报告给 JetBrains。

4

3 回答 3

2

查询很好 - 它看起来像 IDEA Code Inspector 问题。
我找不到任何针对它记录的错误。

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

我确实发现了一个小问题,在 EJB 2.1 的规范中(以及所有其他规范)它说对 NULL 使用大写。

11.2.6.10 空比较表达式
在条件表达式中使用比较运算符 IS NULL 的语法如下:input_parameter }IS [NOT] 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 Provider 为可能无法通过导航访问的对象指定一个“根”。如果 Bean Provider 想要通过比较多个实体 bean 抽象模式类型的实例来选择值,则在 FROM 子句中需要多个跨越抽象模式类型的标识变量。

以下 finder 方法查询返回数量大于 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’
于 2010-05-02T03:30:13.097 回答
1

假设 detailResponse 是关联字段的名称,其值为 DetailResponse 实例的集合,您可以通过关联字段进行导航:

  SELECT distinct OBJECT(rd) FROM RequestDetail rd IN (rd.detailResponse) dr WHERE
  dr.updateReqResponseParentID is not null and dr.updateReqResponseParentID = ?1 
  and rd.deleted id null and dr.deleted is null
于 2010-05-01T16:59:04.997 回答
0

我会将查询与官方资源(如J2EE 1.3的 EJB QL的 BNF 语法)进行比较(因为您提到了 EJB2.1)

有关 JEE5完整查询语言语法的更新规范

于 2010-05-01T10:59:32.587 回答