2013-03-02 63 views
0

DB4o用户如何仅回收一个对象的数据?db4o:我们怎样才能得到只有一个对象的数据?

(这类似于获取数据的传统的关系数据库表中只有一行。)

使用db4o,我只知道如何找回数据的一类对象,但不是简单的一个独特对象实例。

谢谢, 亚历克斯

+1

在java中,您可以选择使用SODA,QBE或NQ(原生查询)。 http://community.versant.com/documentation/reference/db4o-8.0/java/reference/Content/basics/querying.htm http://community.versant.com/documentation/reference/db4o-7.12/java /api/com/db4o/ObjectContainer.html#query(com.db4o.query.Predicate) – Vagaus 2013-03-02 10:58:39

回答

1

只是查询对象并获得第一个项目出结果的(同样喜欢在关系数据库)

使用GUID ID得到它:

using (IObjectContainer session = this.GetNewSession()) 
{ 
    Dummy result = (from Dummy item in session 
        where item.Id == Guid.Parse("....") 
        select item).FirstOrDefault() 
} 

的如果项目不存在或找到对象,结果将为null

其他选项是直接通过内部ID(例如(或甚至是UUI) d):

long id = ....; 
using (IObjectContainer session = this.GetNewSession()) 
{ 
    Dummy result = (Dummy)session.Ext().GetByID(id); 
} 

+0

嗨Tomas,感谢您的回复,我相信我已经回答了我的问题,但也许您有进一步的意见。 – 2013-03-12 15:49:36

0

我已经回答了我的问题(我相信):

解决方案#1:

public List<Object> getListOfObjects(final Object o){ 

    List<Object> result = db.query(new Predicate<Object>(){ 

     @Override 
     public boolean match (Object arg0){ 

     if(arg0.equals(o)){ 
      return true; 
      } 
     else{ 
      return false; 
     } 
    }); 

    return result; 
    } 

解决方案2:

public ObjectSet<Class<?>> getListOfObjects(Object o){ 

     Query q = db.query(); 
     q.constrain(o); 
     ObjectSet<Class<?>> set = q.execute(); 

    return set; 
} 

也许有人知道如果其中一种解决方案比另一种更好,或者其他任何解决方案。