當我在測試 db4o-7.4\doc\tutorial\src\com\db4o\f1\chapter3\CollectionsExample.java 時,發現了一個大問題。原本整個範例是沒有什麼問題,但是當我把原始碼做了一些修正之後,卻出現很奇怪的問題。在 api doc 裏有提到 Db4o.configure() 即將被捨棄,改用 Db4o.newConfigure() 代替。想當然爾,在以後的程式碼裏當然是用 Db4o.newConfigure(),而不會去用 Db4o.configure()。但是如果你真的如此做,你就完蛋了,因為 Db4o.newConfigure() 的 cascadeOnUpdate 對 List 無法產生作用,反而用 Db4o.configure() 才是對的。

public static void updateCarPart1() { Db4o.configure().objectClass(Car.class).cascadeOnUpdate(true); } 改成 public static void updateCarPart1() { Db4o.newConfigure().objectClass(Car.class).cascadeOnUpdate(true); }

會發現結果是 Ferrari[Michael Schumacher/100]/1 : 1261126146125 : 0.1,0.2,0.3 這一個應該產生的結果,卻沒有生效;也就是說 update 對 List 沒有作用。

在 db4o 7.4 for java5 不要使用 newConfigure(),請用舊的 configure()。

最新研究,原來要用 newConfigure() 也是可以的,但是請記住 configure() 是設定預設值,也就是 openFile(filename) 所使用的 configure。而 newConfigure() 則是新建立一個設定值,跟原來的設定是不同的,需使用 openFile(config, filename) 才可以。不過,在最新的 7.12 版本已經有很大的變化了,還是用最新的版本好了,免得又要重新寫 code。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()