Мне нужно добавить временную вершину из одной передачи в другую.
Поскольку время между созданием временной вершины и окончательным коммитом слишком велико, я хочу отключить первый tx, а когда наступит время сохранения, запустить новый tx и сохранить все измененные вершины.
Это прекрасно работает с существующей вершиной, но не работает с временной.
Посмотрите на этот код:
private void testAttach() {
OrientGraphFactory factory = new OrientGraphFactory("remote:localhost/Test", "root", "toor").setupPool(10, 50);
OrientGraph tx = factory.getTx();
HashMap<String,String> hm = new HashMap<>();
long ls = System.currentTimeMillis();
System.out.println("timestamp: "+ls);
hm.put("s", "test temporal "+ls);
OrientVertex onew = tx.addVertex("SimpleVertex", hm);
System.out.println("onew RID: "+onew.getId() + " isDetached: "+onew.isDetached() + " isLocked: "+onew.isLocked());
System.out.println("detach...");
onew.detach();
System.out.println("onew RID: "+onew.getId() + " isDetached: "+onew.isDetached() + " isLocked: "+onew.isLocked());
OrientVertex onew1 = tx.addVertex("SimpleVertex", hm);
OrientVertex onew2 = tx.addVertex("SimpleVertex", hm);
System.out.println(""+onew.getId()+" - "+onew1.getId()+" - "+onew2.getId());
System.out.println("recupearndo existente ");
OrientVertex oEx = tx.getVertex("#33:1665");
System.out.println("Existente: "+oEx.getId().toString());
System.out.println("cerrando la tx...");
tx.shutdown(true, false);
System.out.println("post shutdown tx: ");
System.out.println("onew RID: "+onew.getId() + " isDetached: "+onew.isDetached() + " isLocked: "+onew.isLocked());
System.out.println("abriendo tx...");
tx = factory.getTx();
OrientVertex onew3 = tx.addVertex("SimpleVertex", hm);
OrientVertex onew4 = tx.addVertex("SimpleVertex", hm);
System.out.println(""+onew.getId()+" - "+onew1.getId()+" - "+onew2.getId()+" - "+onew3.getId()+" - "+onew4.getId());
System.out.println("oEx RID: "+oEx.getId() + " isDetached: "+oEx.isDetached() + " isLocked: "+oEx.isLocked());
oEx.setProperty("s", oEx.getProperty("s")+"-");
tx.attach(onew);
System.out.println("onew RID: "+onew.getId() + " isDetached: "+onew.isDetached() + " isLocked: "+onew.isLocked());
tx.commit();
System.out.println("onew RID: "+onew.getId() + " isDetached: "+onew.isDetached() + " isLocked: "+onew.isLocked());
}
Это производит этот вывод:
timestamp: 1555066533622
onew RID: #-1:-2 isDetached: false isLocked: false
detach...
onew RID: #-1:-2 isDetached: true isLocked: false
#-1:-2 - #-1:-3 - #-1:-4
recuperando existente
Existente: #33:1665
cerrando la tx...
post shutdown tx:
onew RID: #-1:-2 isDetached: true isLocked: false
abriendo tx...
#-1:-2 - #-1:-3 - #-1:-4 - #-1:-2 - #-1:-3
oEx RID: #33:1665 isDetached: false isLocked: false
onew RID: #-1:-2 isDetached: false isLocked: false
onew RID: #-1:-2 isDetached: false isLocked: false
То, что я вижу, это временные идентификаторы, генерируемые за Tx.
Существующий объект автоматически присоединяется к новому открытому Tx и корректно сохраняется при фиксации.
Я не нашел способа прикрепить временную вершину к новому Tx, и она игнорируется при фиксации tx.
Есть ли способ сделать это?