1

我有 2 个通过 oneToMany 关系关联的对象(“一个模型可以有很多事件”)。

我正在尝试在 ejbql 中创建一个子查询来查找一个事件的模型,如下所示:

SELECT model 
FROM RegModelValue model 
WHERE :event IN (model.events) 

....但 toplink 不识别模型别名并告诉我“内部异常:第 1:129 行:意外令牌:模型”

有任何想法吗 ?

非常感谢提前!

4

2 回答 2

0

我认为顺序是错误的,:event不能在 a 之前IN

尝试这个 :

    SELECT model 
    FROM RegModelValue model 
    JOIN model.events events
    WHERE events.id = :event
于 2009-09-28T16:22:49.807 回答
0

您的 JPQL 查询的语法应该是:

SELECT model 
FROM RegModelValue model 
WHERE model.events IN (:event)

下面,JPA 1.0 规范的相关部分:

4.6.8 在表达式中

在条件表达式中使用比较运算符 [NOT] IN 的语法如下:

in_expression ::=
    state_field_path_expression [NOT] IN ( in_item {, in_item}* | subquery)
in_item ::= literal | input_parameter

state_field_path_expression 必须具有字符串、数字或枚举值文字和/或 input_parameter 值必须与 type 中 state_field_path_expression的抽象模式类型相同。(见第 4.12 节)。

子查询的结果必须与 type 中state_field_path_expression的抽象模式类型相同。第 4.6.15 节“子查询”中讨论了子查询。

例子是:

o.country IN (’UK’, ’US’, ’France’) 为真,为UKPeru,等价于表达式 (o.country = ’UK’) OR (o.country = ’US’) OR (o.country = ’ France’)

o.country NOT IN (’UK’, ’US’, ’France’)为假,为UKPeru,等价于表达式NOT ((o.country = ’UK’) OR (o.country = ’US’) OR (o.country = ’France’))

逗号分隔列表中必须至少有一个元素定义 IN 表达式的值集。

如果 IN 或 NOT IN 表达式中state_field_path_expressionNULL的值是或未知的,则表达式的值是未知的。

于 2010-09-11T07:30:14.603 回答