Здравствуйте, у меня есть база данных объектов в OrientDb, в настоящее время я открываю и закрываю свои подключения к базе данных после получения необходимых мне данных, по этой причине я использую fetchplan *:-1 и отсоединяю свои pojos, используя .detachAll(entity, true ).
Например:
public <T extends NamedEntity> List<T> findAll(Class<T> entityClass) {
db= pool.acquire(connectionString, user, password);
db.getEntityManager().registerEntityClasses("com.mypackage");
List<T> l= new ArrayList<T>();
OObjectIteratorClass<T> it= db.browseClass(entityClass);
if (it == null)
throw new RuntimeException("entityClass " + entityClass.getName() + "not browseable by OrientDb");
it.setFetchPlan("*:-1");
for (T entity : it) {
l.add((T) db.detachAll(entity, true));
}
db.close();
return l;
}
Проблема в том, что когда я пытаюсь .save() этих парней вернуться в базу данных, я получаю конфликт версий, если два объекта имеют ссылки на третий объект. Это происходит потому, что когда я сохраняю первую, ссылка также сохраняется из-за вызова detachAll, поэтому, когда я сохраняю вторую сущность, ссылка также будет сохранена снова, но эта вторая ссылка на сущность находится в версии на один ниже текущей ( хотя ссылку я вообще не трогал.)
Как это:
List<MyClass> l= findAll(MyClass.class);
//assuming the list contains two elements
MyClass my1= l.get(0);
my1.setLink(myLinkedClass);
MyClass my2= l.get(1);
my2.setLink(myLinkedClass);
db.save(my1);
db.save(my2);
Итак, я спрашиваю, есть ли способ сохранить pojo без сохранения ссылок? Любой специальный вызов метода, который я могу использовать, чтобы сказать OrientDb: «Эй, не смотрите в ссылки при сохранении этого pojo, смотрите только на их RID»?