OrientDB 2.1.2查询@rid返回负RID异常求助
解决OrientDB 2.1.2中子查询返回负RID导致的INSERT异常问题
这个问题我之前在处理OrientDB早期版本时也碰到过,本质是子查询返回了临时虚拟RID(也就是你看到的#-2:0这类负RID),而非存储的真实RID——这类临时记录仅存在于查询执行过程中,无法被持久化到其他字段里,自然会导致INSERT操作异常。下面是具体的解决方案:
1. 子查询替换为返回真实RID字段
你的子查询select @rid from actions返回的是临时生成的虚拟记录的@rid,而真实的持久化RID存在于rid字段中,所以首先要把查询改成:
select rid from actions where ...
单独执行这个子查询,确认返回的结果是类似#12:24的真实RID,而不是负RID。
2. 主查询中确保子查询返回单个RID值
如果子查询可能返回多条记录,直接赋值会导致集合类型不匹配,所以需要明确取第一个结果的RID值,修改后的INSERT查询如下:
INSERT INTO activityDetails SET name = "Dummy", actionMap = {"1": (select rid from action where ...)[0]}
通过[0]索引直接获取子查询返回的第一条记录的rid值,这样就能把真实的RID存入actionMap字段中。
额外说明
在OrientDB 2.x版本中,当子查询作为表达式嵌入主查询时,默认会返回包含临时@rid的虚拟记录对象,而非直接返回字段值。所以必须显式指定要返回的真实字段(这里是rid),并确保最终赋值的是单个RID字符串,而不是虚拟记录对象。
内容的提问来源于stack exchange,提问作者Pyntamil Selvi
相关产品推荐
相关产品推荐

