Query By Example
当你使用QBE时,你要给Db4o提供一个模板对象,Db4o将返回所有匹配不是默认值的对象。通过反射机制把所有没有采用默认值的属性同过
AND表达式连接成为一个查询表达式,这儿是一个简单的例子:
PersistentExample.java: retrievePilotByName
public static void retrievePilotByName(ObjectContainer db) .{
Pilot proto=new Pilot("Michael Schumacher",0);
ObjectSet result=db.get(proto);
listResult(result);
}
同过这种方式有很多明显的限制:
1.db4o必须通过放射机制得到对象所有属性.
2.不能只想高级查询表达式.(比如AND OR NOT 等等)
3.不能对属性约束某些值,比如0,空字符,null,因为这些值被解释为没有约束.
4.你需要创建对象而不是已经初始化的,也就是说你不能初始化属性如果他们已经被声明.你不能强迫
一个类的对象仅仅允许一个定义很好的初始化的契约.
5.你需要一个构造器来创建对象而不是已初始的属性.
避免上述的限制,db4o提供了NQ查询系统.