java - 有没有办法“获取”一个属性而不是在 Xodus 中“找到”它?
问题描述
我在 Xodus 中有两个实体。一种叫做 SynsetID,它只有一个属性:synsetID。然后我有光泽度,它有一个叫做光泽度的属性。一个 SynsetID 可以链接到多个注释。我使用以下代码填充数据库:
PersistentEntityStore store = PersistentEntityStores.newInstance("glosses-test");
final StoreTransaction txn = store.beginTransaction();
Entity synsetID;
Entity gloss;
String id;
for (BabelSynset synset : synsetList){
id = synset.getId().getID();
System.out.println(id + " : ");
List<BabelGloss> glosses = synset.getGlosses(chosenLang);
synsetID = txn.newEntity("SynsetID");
synsetID.setProperty("synsetID", id);
String glossInLang;
for (BabelGloss g : glosses){
glossInLang = g.getGloss();
gloss = txn.newEntity("Gloss");
gloss.setProperty("gloss", glossInLang);
gloss.addLink("synsetID", synsetID);
synsetID.addLink("gloss", gloss);
System.out.println(id + " : " + glossInLang);
}
txn.flush();
}
txn.commit();
但是当然,如果我想获得一个特定的 SynsetID,而不是直接以键值方式获得它,我必须搜索它:
PersistentEntityStore store = PersistentEntityStores.newInstance("glosses-test");
final StoreTransaction txn = store.beginReadonlyTransaction();
Entity synsetID;
Entity gloss;
String id;
for (BabelSynset synset : synsetList){
id = synset.getId().getID();
EntityIterable candidates = txn.find("SynsetID", "synsetID", id);
if (!candidates.isEmpty()){
System.out.println(id + ": ");
}
for (Entity s : candidates){
for (Entity g : s.getLinks("gloss")){
System.out.println(id + " : " + g.getProperty("gloss"));
}
}
}
这不是非常低效吗?我可以做不同的事情吗?
解决方案
你可以这样做:
for (Entity s: txn.getAll("SynsetID")) {
Comparable id = s.getProperty("synsetID");
for (Entity g : s.getLinks("gloss")) {
System.out.println(id + " : " + g.getProperty("gloss"));
}
}
此代码对 synsetID 属性的唯一性没有任何假设。我不认为它的性能会更好,但它看起来更简洁。您的代码没问题,特别是如果必须按 id 分组。
推荐阅读
- compilation - 对于 mlir,“阻抗不匹配”是什么意思?
- python - 尝试在 PyTorch 中加载检查点时没有名为“parse_config”的模块
- php - 多个循环中的问题只有一个结果为真
- angular - mwl-calendar-month-view [events] 值更改后的角度刷新视图
- node.js - 如何通过 Heroku 分配的端口进行 CI 测试 SailsJS 应用程序
- sql - Oracle SQL - SELECT CASE WHEN 列 =(选择语句)
- c# - 更新数据库和缓存中的数据的最佳实践
- azure-functions - Azure Function - 保护对存储帐户的访问
- ios - 使用 Docker 自动化 iOS 测试
- sql-server - SSIS/SQL:将在多个相关临时表中准备的数据移动到“真实”表而不覆盖现有数据(附加)