返回对象的属性访问权限抛出ODatabaseException:未在当前线程中设置数据库

时间:2016-01-11 22:43:51

标签: orientdb

我正在使用orientdb-object-2.1.9并尝试设置基本存储库来保存和查找对象。

但是当从数据库访问返回对象的任何属性时,它会抛出一个ODatabaseException,该数据库未在当前线程中设置。

这是一个失败的测试,显示了我对API的使用。

import javax.persistence.Id;
import javax.persistence.Version;

import com.orientechnologies.orient.core.db.OPartitionedDatabasePool;
import com.orientechnologies.orient.object.db.OObjectDatabaseTx;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class ObjectDatabaseTest {
private MyObjectAuthorRepository repository;

@Before
public void setUp() {
    repository = new MyObjectAuthorRepository();
}

@After
public void tearDown() {
    repository.close();
}

@Test
public void testAuthor() {
    Author savedAuthor = repository.saveAuthor(new Author("Author Name"));
    // a detached object also fails when accessing the property
    // Assert.assertEquals("Author Name", savedAuthor.getAuthorName());
    Author author = repository.findAuthor();
    Assert.assertEquals("Author Name", author.getAuthorName());
}

class MyObjectAuthorRepository {
    private final OPartitionedDatabasePool pool;

    public MyObjectAuthorRepository() {
        pool = new OPartitionedDatabasePool("memory:test", "admin", "admin");
        pool.setAutoCreate(true);
        try (OObjectDatabaseTx db = new OObjectDatabaseTx(pool.acquire())) {
            db.setAutomaticSchemaGeneration(true);
            db.getEntityManager().registerEntityClass(Author.class);
        }
    }

    private Author saveAuthor(Author author) {
        OObjectDatabaseTx db = new OObjectDatabaseTx(pool.acquire());
        try {
            db.begin();
            Author savedAuthor = db.save(author);
            db.commit();
            return db.detach(savedAuthor);
        } catch (Exception ex) {
            db.rollback();
            throw ex;
        } finally {
            db.close();
        }
    }

    public Author findAuthor() {
        try (OObjectDatabaseTx db = new OObjectDatabaseTx(pool.acquire())) {
            return db.browseClass(Author.class).next();
        }
    }

    public void close() {
        pool.close();
    }
}

@javax.persistence.Entity
public class Author {
    @Id
    private String id;
    @Version
    private Long version;
    private String authorName;

    public Author() {
    }

    public Author(String authorName) {
        this.authorName = authorName;
    }

    public String getId() {
        return id;
    }

    public Long getVersion() {
        return version;
    }

    public String getAuthorName() {
        return authorName;
    }

    public void setAuthorName(String authorName) {
        this.authorName = authorName;
    }
}
}

如果API应以不同的方式使用,或者我上面缺少任何其他配置,请告知我们。它会非常有帮助。感谢。

0 个答案:

没有答案