在这个基准测试中,ObjectDB是最快的数据库:http: //www.jpab.org/All/All/All.html
但我看不到ObjectDB的任何其他基准测试结果.是否有人使用ObjectDB?生产准备好了吗?有什么经历?
我正在使用带有JPA的ObjectDB.我想调用myMethod().例如:
entityManager.createQuery("SELECT ... FROM ... WHERE MyClass.myMethod() = 100")
Run Code Online (Sandbox Code Playgroud)
可能吗?在类中的方法之前可能需要任何注释吗?
@Entity
public class MyClass implements Serializable {
@Basic
private int x;
@Basic
private int y;
public int myMethod() {
return x*1000+y;
}
}
Run Code Online (Sandbox Code Playgroud) 我无法让ObjectDB根据其ID选择多个值。我的查询非常简单:
Query query = getEntityManager().createQuery("SELECT i FROM " + getEntityClass().getSimpleName() + " i WHERE i.id IN :ids", entityClass);
query.setParameter("ids", ids);
List<Object> values = query.getResultList();
Run Code Online (Sandbox Code Playgroud)
但是无论如何,这总是返回一个空列表。
ID列表包含所有现有ID的列表,均作为Long对象。我对此进行了三重检查。
查询如:
entityManager.find(getEntityClass(), id);
Run Code Online (Sandbox Code Playgroud)
...和...
Query query = entityManager.createQuery("SELECT i FROM " + getEntityClass().getSimpleName() + " i", entityClass);
Run Code Online (Sandbox Code Playgroud)
...工作正常。
另外,如果我这样做:EntityManager.find(getEntityClass(),1L);
我得到的结果是正确的结果:一个实例。
但:
List<Long> ids = new LinkedList<Long>();
ids.add(1L);
Query query = getEntityManager().createQuery("SELECT i FROM " + getEntityClass().getSimpleName() + " i WHERE i.id IN :ids", entityClass);
query.setParameter("ids", ids);
List<Object> values = query.getResultList();
Run Code Online (Sandbox Code Playgroud)
向该values变量返回一个空列表。
我想念什么? …
我是JPA/JDO和整个objectdb世界的新手.
我有一个带有一组字符串的实体,看起来有点像:
@Entity
public class Foo{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Key id;
private Set<String> bars;
public void setBars(Set<String> newBars){
if(this.bars == null)
this.bars = new HashSet<String>;
this.bars = newBars;
}
public Set<String> getBars(){
return this.bars;
}
public void addBar(String bar){
if(this.bars == null)
this.bars = new HashSet<String>;
this.bars.add(bar);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在代码的另一部分,我正在尝试做这样的事情:
EntityManager em = EMF.get().createEntityManager();
Foo myFoo = em.find(Foo.class, fooKey);
em.getTransaction().begin();
myFoo.addBar(newBar);
em.merge(myFoo);
em.getTransaction().commit();
Run Code Online (Sandbox Code Playgroud)
当然,当newBar是String时.
但是,我得到的是:
javax.jdo.JDODetachedFieldAccessException: You have just attempted to access field "bars" yet this field was not detached …Run Code Online (Sandbox Code Playgroud) 在ObjectDB中我看到:( 这是链接.)
ObjectDB是一个功能强大的面向对象的数据库管理系统(ODBMS).
我看到它实现了JPA,所以它是否意味着它应该是一个ORM提供者?或不?有什么不同?