访问查询结果时OrientDB函数出错
OrientDB function error when accessing query result
我在OrientDB studio中有如下函数,函数保存没有问题:
var entities= db.query("select Name from F__Entity_Master");
getTemplate(0);
function getTemplate(index){
if (index >= entities.length){
return entities;
} else {
var sql = "select from F__Subjects where subjectCode='"+ entities[index]['@class']+"'";
var template = db.query(sql);
entities[index]['template']= template;
index += 1;
getTemplate(index);
}
}
运行 Studio 中的函数生成以下错误:
Erroronparsingscriptatposition#0: ErroronexecutionofthescriptScript: GetEntities------^sun.org.mozilla.javascript.internal.EvaluatorException: Javaclass"com.orientechnologies.orient.core.record.impl.ODocument"hasnopublicinstancefieldormethodnamed"template".(#12)inatlinenumber12Javaclass"com.orientechnologies.orient.core.record.impl.ODocument"hasnopublicinstancefieldormethodnamed"template".(#12)
我使用递归来避免在从数据库中获取数据之前使用空值。使用 for 循环会产生类似的错误。
F__Subjects 和 F__Entity_Master 之间没有关系,因为每个 F__Subjects 记录都会生成一个相关的 class,命名为 F__Subjects 记录的 subjectCode 字段并继承自 F__Entity_Master。因此,检测关系的唯一方法是使用 subjectCode 字段从他 F__Subjects class.
获取 class 元信息
有什么想法吗?
已解决
我使用了 Lvca 提示,这是经过几次试验后该函数的正确版本:
var entities= db.query("select from F__Entity_Master");
getTemplate(0);
return entities
function getTemplate(i){
if (i >= entities.length){
return ;
} else {
var sql = "select from F__Subjects where subjectCode='"+ entities[i].getClassName()+"'";
var template = db.query(sql);
entities[i].field('template', template[0].toMap());
i += 1;
getTemplate(i);
}
}
entities 是一个 ODocument 数组,所以对于 get/set 一个字段你应该分别使用 field(name)
和 field(name,value)
方法。
尝试field.getProperty()
在 javascript 中为 orientdb 服务器编写函数时,这对我有用
我在OrientDB studio中有如下函数,函数保存没有问题:
var entities= db.query("select Name from F__Entity_Master");
getTemplate(0);
function getTemplate(index){
if (index >= entities.length){
return entities;
} else {
var sql = "select from F__Subjects where subjectCode='"+ entities[index]['@class']+"'";
var template = db.query(sql);
entities[index]['template']= template;
index += 1;
getTemplate(index);
}
}
运行 Studio 中的函数生成以下错误:
Erroronparsingscriptatposition#0: ErroronexecutionofthescriptScript: GetEntities------^sun.org.mozilla.javascript.internal.EvaluatorException: Javaclass"com.orientechnologies.orient.core.record.impl.ODocument"hasnopublicinstancefieldormethodnamed"template".(#12)inatlinenumber12Javaclass"com.orientechnologies.orient.core.record.impl.ODocument"hasnopublicinstancefieldormethodnamed"template".(#12)
我使用递归来避免在从数据库中获取数据之前使用空值。使用 for 循环会产生类似的错误。
F__Subjects 和 F__Entity_Master 之间没有关系,因为每个 F__Subjects 记录都会生成一个相关的 class,命名为 F__Subjects 记录的 subjectCode 字段并继承自 F__Entity_Master。因此,检测关系的唯一方法是使用 subjectCode 字段从他 F__Subjects class.
获取 class 元信息有什么想法吗?
已解决 我使用了 Lvca 提示,这是经过几次试验后该函数的正确版本:
var entities= db.query("select from F__Entity_Master");
getTemplate(0);
return entities
function getTemplate(i){
if (i >= entities.length){
return ;
} else {
var sql = "select from F__Subjects where subjectCode='"+ entities[i].getClassName()+"'";
var template = db.query(sql);
entities[i].field('template', template[0].toMap());
i += 1;
getTemplate(i);
}
}
entities 是一个 ODocument 数组,所以对于 get/set 一个字段你应该分别使用 field(name)
和 field(name,value)
方法。
尝试field.getProperty()
在 javascript 中为 orientdb 服务器编写函数时,这对我有用