DB4o ユーザーが 1 つのオブジェクトのみのデータを取得するにはどうすればよいですか?
(これは、従来のリレーショナル データベース テーブルの 1 行のみのデータを取得することに似ています。)
DB4o では、1 つの一意のオブジェクト インスタンスではなく、オブジェクト クラスのデータを取得する方法しか知りません。
DB4o ユーザーが 1 つのオブジェクトのみのデータを取得するにはどうすればよいですか?
(これは、従来のリレーショナル データベース テーブルの 1 行のみのデータを取得することに似ています。)
DB4o では、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 (または UUID) で直接取得することです。
long id = ....;
using (IObjectContainer session = this.GetNewSession())
{
Dummy result = (Dummy)session.Ext().GetByID(id);
}
私は自分の質問に答えました(私は信じています):
解決策 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;
}
これらのソリューションのいずれかが他のソリューションよりも優れているかどうか、または何でも知っている人がいるかもしれません。