Query By Example
當(dāng)你使用QBE時(shí),你要給Db4o提供一個模板對象,Db4o將返回所有匹配不是默認(rèn)值的對象。通過反射機(jī)制把所有沒有采用默認(rèn)值的屬性同過
AND表達(dá)式連接成為一個查詢表達(dá)式,這兒是一個簡單的例子:
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必須通過放射機(jī)制得到對象所有屬性.
2.不能只想高級查詢表達(dá)式.(比如AND?。希摇。危希浴〉鹊龋?br />3.不能對屬性約束某些值,比如0,空字符,null,因?yàn)檫@些值被解釋為沒有約束.
4.你需要創(chuàng)建對象而不是已經(jīng)初始化的,也就是說你不能初始化屬性如果他們已經(jīng)被聲明.你不能強(qiáng)迫
一個類的對象僅僅允許一個定義很好的初始化的契約.
5.你需要一個構(gòu)造器來創(chuàng)建對象而不是已初始的屬性.
避免上述的限制,db4o提供了NQ查詢系統(tǒng).