你好我在OrientDb有一个对象数据库,我正在获取我需要的数据后打开和关闭我与数据库的连接,因此我使用fetchplan *: - 1并使用.detachAll分离我的pojos(实体,真实)。
例如:
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调用也保存了链接,因此当我保存第二个实体时,链接也将再次保存,但第二个实体链接位于当前版本之下的版本1中(即使我根本没有碰过这个链接。)
像这样:
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”?
答案 0 :(得分:0)
您可以先保存链接对象,然后保存主对象。通过这种方式,OrientDB将找到非脏对象并跳过级联保存。