首页 > 解决方案 > 在 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

如果有人能指出我在这里做错了什么,将不胜感激。

标签: orientdbpyorientorientdb3.0

解决方案


修复了问题。由于推荐项是 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))

该更改解决了问题并且记录已成功插入


推荐阅读