當我在測試 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) 人氣()