App Engine‎ > ‎

objectify

官方網頁:http://code.google.com/p/objectify-appengine/

Entity Class 注意事項

  • staticfinal 以及有註記 javax.persistence.Transient 這個 annotation 的 field 不會作 persist。
  • 一定要有一個 field 標記 annotation 為 javax.persistence.Id,這個 field 的資料型態可以是 Longlong 或是 String。如果是 Long,並且在 put() 前沒有設定該值的 object,會自動產生一個值。如果你使用 String 或是 primitive 的 long,值並不會自動產生。
  • 你可以 persist 下列的資料型態:core value type、core value type 的 Collection(例如 ListSet)或是 array。3.x 版以後可以用 @Serialized 的方式將其他可 serialized 的 class 給 persist,不過這種 class 必須 implement Serializable,不能用 GWT 的 IsSerializable
  • 必須要有一個沒有 argument 的 constructor(或是沒有 constructor,Java 會建立一個 default、沒有 argument 的 constructor)。這個 constructor 可以是 privatepublic
  • 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 依然會出現。

暫時 memo

test 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());  //會有東西
Comments