我有2个对象通过oneToMany关系关联(“一个模型可以有很多事件”)。
我正在尝试在ejbql中创建一个子查询来查找一个事件的模型,如下所示:
SELECT model
FROM RegModelValue model
WHERE :event IN (model.events)
.... 但toplink doent识别模型别名并告诉我“内部例外:第1:129行:意外令牌:模型”
有什么想法吗?
非常感谢提前!
答案 0 :(得分:0)
我认为订单有误,:event
不能在IN
之前。
试试这个:
SELECT model
FROM RegModelValue model
JOIN model.events events
WHERE events.id = :event
答案 1 :(得分:0)
您的JPQL查询的语法应为:
SELECT model
FROM RegModelValue model
WHERE model.events IN (:event)
下面是JPA 1.0规范的相关部分:
4.6.8在表达式中
使用的语法 比较运算符[NOT] IN in a 条件表达式如下:
in_expression ::= state_field_path_expression [NOT] IN ( in_item {, in_item}* | subquery) in_item ::= literal | input_parameter
state_field_path_expression 必须有字符串,数字或枚举 值。文字和/或 input_parameter值必须是这样的 相同的抽象模式类型 类型中的 state_field_path_expression 。 (见4.12节)。
子查询的结果必须是 喜欢相同的抽象模式类型 中的 state_field_path_expression 类型。子查询在中讨论 第4.6.15节“子查询”。
例如:
o.country IN (’UK’, ’US’, ’France’)
UK
为真,Peru
为false, 并且相当于表达式(o.country = ’UK’) OR (o.country = ’US’) OR (o.country = ’ France’)
。o.country NOT IN (’UK’, ’US’, ’France’)
的
UK
为false,为true 对于Peru
,并且相当于 表达NOT ((o.country = ’UK’) OR (o.country = ’US’) OR (o.country = ’France’))
。必须至少有一个元素 以逗号分隔的列表定义 IN的值集 表达
如果是a的值 IN或NOT IN表达式中的 state_field_path_expression 为
NULL
或 未知,表达的价值 不明。