我是HypergraphDB的新手,我只运行了几个测试来了解事情是如何工作的,并且遇到了这个问题。我已经创建了一个具有不同HGRel的超图,我希望获得具有特定名称的超图,并试图使用以下代码
List<HGRel> r = hg.getAll(graph, hg.and(hg.type(HGRel.class), hg.eq("name", "XXX")));基本上,我希望找到所有名为"XXX“的超边,但不幸的是,我得到了这个错误。
java.lang.RuntimeException: org.hypergraphdb.HGException: Could not find projection for 'name' in HG type a5edd585-2d5c-4555-8fdf-f9954bd35fe9 for HGRel
at org.hypergraphdb.transaction.HGTransactionManager.ensureTransaction(HGTransactionManager.java:324)
at org.hypergraphdb.query.cond2qry.ExpressionBasedQuery.<init>(ExpressionBasedQuery.java:812)
at org.hypergraphdb.HGQuery.make(HGQuery.java:174)
at org.hypergraphdb.HyperGraph.find(HyperGraph.java:1524)
at org.hypergraphdb.HGQuery$hg$10.call(HGQuery.java:1753)
at org.hypergraphdb.HGQuery$hg$10.call(HGQuery.java:1)
at org.hypergraphdb.transaction.HGTransactionManager.transact(HGTransactionManager.java:400)
at org.hypergraphdb.transaction.HGTransactionManager.ensureTransaction(HGTransactionManager.java:327)
at org.hypergraphdb.HGQuery$hg.getAll(HGQuery.java:1746)我总是可以在应用程序上获得所有的HGRel和过滤器,但是我想知道我在这里做错了什么。提前谢谢你
发布于 2018-02-02 05:29:23
策划人不是故意在那里的。它不是HRel的可变属性。当您创建HGRel原子时,通常需要将它们添加到一个HGRelType中,这个HGRelType本身将包含这个标签。
在您的情况下,可能发生的情况是,您将HGRel存储为Java,而根本不使用HGRelType。这是一种策略,但特定的API (HGRelType、HGRel、HGRelTypeConstructor)并不打算以这种方式使用。
相反,我建议创建您自己的泛型LabeledLink类,其中的名称是bean属性,然后通过它进行索引,这样您就可以更有效地查询:
公共类LabeledLink扩展了HGPlainLink {私有字符串标签;
公共LabeledLink(HGHandle…)(目标){超(目标);}
公共无效setLabel(字符串标签)…
公共字符串getLabel() {返回标签;}
graph.getTypeSystem().getTypeHandle(LabeledLink.class);HGHandle labeledType =graph.getIndexManager().register(labeledType,“label”);
干杯,鲍里斯
发布于 2018-01-11 16:26:30
找到了问题所在。在HGRel中没有名字设置器。只需放置一个setter,上面的代码就可以正常工作了。
https://stackoverflow.com/questions/48211435
复制相似问题