OrientDb在使用对象数据库时如何不更新链接

时间:2014-07-21 21:37:21

标签: java orientdb

你好我在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”?

1 个答案:

答案 0 :(得分:0)

您可以先保存链接对象,然后保存主对象。通过这种方式,OrientDB将找到非脏对象并跳过级联保存。