orientdb - 在 OrientDB 类中存储 LinkedSet 会导致无法序列化无效链接 #-1:-1
问题描述
我正在尝试使用 python 客户端在 OrientDB 的顶点中插入一条记录。代码如下
print(recommendationCluster['recommendation'])
for recommendation in recommendationCluster['recommendation']:
item = menuitems.loadMenuItemWithId(str(recommendation),orientclient)
items.append(item._rid)
print("Creating cluster of ", items)
cluster['recommendeditems'] = items
dbData = {}
dbData['@RecommendationCluster']=cluster
print("Storing recommendation cluster ", dbData)
newCluster = orientclient.record_create(-1, dbData)
在控制台中我看到了消息
Storing recommendation cluster {'@RecommendationCluster': {'recommendeditems': ['#126:2', '#124:8']}}
这表明它已获得正确项目的链接并正在执行插入。
但是 record_create 失败,我在 OrientDB 服务器控制台中得到以下异常
com.orientechnologies.orient.core.exception.ODatabaseException: Impossible to serialize invalid link #-1:-1
如果有人能指出我在这里做错了什么,将不胜感激。
解决方案
修复了问题。由于推荐项是 LinkSet,因此要传递给数组的值应引用 Link 对象
for recommendation in recommendationCluster['recommendation']:
item = menuitems.loadMenuItemWithId(str(recommendation),orientclient)
items.append(item._rid)
必须更改为
for recommendation in recommendationCluster['recommendation']:
item = menuitems.loadMenuItemWithId(str(recommendation),orientclient)
items.append(pyorient.OrientRecordLink(item._rid))
该更改解决了问题并且记录已成功插入
推荐阅读
- discord.js - Discord.js 频道更新事件,忽略某些频道
- rest - 我应该在 rest api 中使用 GET 或 POST 或 PUT 来根据少数输入参数获取输出,这些输入参数将被接受为请求正文的一部分
- git - 尝试镜像 Git 存储库时,我收到“不是 git 存储库”错误
- c# - 如何遍历json数组
- angular - 构建 Angular 项目错误“重复标识符 'IteratorResult'”
- node.js - Electron:“路径”参数必须是字符串类型。接收到的类型对象
- azure - Azure.RequestFailedException:不知道这样的主机
- r - 按类型将列转换为多列
- python - 在 django 中为未知模型制作 ForiegnKey
- angular - Angular:仅通过给定的管道名称获取管道类的实例