У меня есть две сущности в Xodus. Один называется SynsetID, который имеет только одно свойство: synsetID. Тогда у меня есть Gloss, у которого есть свойство, называемое глянцем. Один 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();
Но, конечно, тогда, если я хочу получить конкретный c 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"));
}
}
}
Разве это не очень неэффективно? Могу ли я сделать это по-другому?