官方網頁: http://code.google.com/p/objectify-appengine/
Entity Class 注意事項
static 、final 以及有註記 javax.persistence.Transient 這個 annotation 的 field 不會作 persist。
- 一定要有一個 field 標記 annotation 為
javax.persistence.Id ,這個 field 的資料型態可以是 Long 、long 或是 String 。如果是 Long ,並且在 put() 前沒有設定該值的 object,會自動產生一個值。如果你使用 String 或是 primitive 的 long ,值並不會自動產生。
- 你可以 persist 下列的資料型態:core value type、core value type 的 Collection(例如
List 、Set )或是 array。3.x 版以後可以用 @Serialized 的方式將其他可 serialized 的 class 給 persist,不過這種 class 必須 implement Serializable ,不能用 GWT 的 IsSerializable 。
- 必須要有一個沒有 argument 的 constructor(或是沒有 constructor,Java 會建立一個 default、沒有 argument 的 constructor)。這個 constructor 可以是
private ~public 。
- Objectify 使用 JPA annotation(
javax.persistence )、以及一些自己的 anootation,而不是 JDO annotation(javax.jdo.annotations ),這在轉換既有 JDO project 的時候要特別注意。
- 如果 GWT RPC 會用到,雖然不用 DTO 之類的行為,但是還是要記得 implement
IsSerializable 。
- entity class 沒有註記 indexed 的 field 作 filter()、order() 會得到空的 list。
- entity class 的 spec 改變不溯及既往,例如之前 Foo 的 orz 有 indexed,存了三筆資料 A~C、之後改成 unindexed,又存了兩筆資料 D、E,則對 Foo 作 order("orz") 時,A~C 依然會出現。
暫時 memotest version: Objectify 4.0 * save 時候除了塞資料庫、自動產生 id 之外,同一個 instance 也會立刻有 id 值 Foo foo = new foo(); System.out.println(foo.getId()); //沒有東西 ofy.save().entities(foo).now(); System.out.println(foo.getId()); //會有東西 |
|