我有 2 个通过 oneToMany 关系关联的对象(“一个模型可以有很多事件”)。
我正在尝试在 ejbql 中创建一个子查询来查找一个事件的模型,如下所示:
SELECT model
FROM RegModelValue model
WHERE :event IN (model.events)
....但 toplink 不识别模型别名并告诉我“内部异常:第 1:129 行:意外令牌:模型”
有任何想法吗 ?
非常感谢提前!
我认为顺序是错误的,:event
不能在 a 之前IN
。
尝试这个 :
SELECT model
FROM RegModelValue model
JOIN model.events events
WHERE events.id = :event
您的 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’)
为真,为UK
假Peru
,等价于表达式(o.country = ’UK’) OR (o.country = ’US’) OR (o.country = ’ France’)
。
o.country NOT IN (’UK’, ’US’, ’France’)
为假,为UK
真Peru
,等价于表达式NOT ((o.country = ’UK’) OR (o.country = ’US’) OR (o.country = ’France’))
。逗号分隔列表中必须至少有一个元素定义 IN 表达式的值集。
如果 IN 或 NOT IN 表达式中state_field_path_expression
NULL
的值是或未知的,则表达式的值是未知的。