[英]a way to convert appengine datastore Entity to my object?
使用google appengine 1.3.0 w / java和jdo ...
在嘗試為一對多擁有的關系編寫JDO查詢時,我遇到了一個我認為非常聰明的非JDO概念。 祖先Querys。 appengine.api.datastore.Query接口允許使用父鍵確定查詢范圍。
不幸的是,查詢的結果是帶有屬性列表的“實體”對象。 apis中是否有一個util會將其中一個Entity對象轉換為我的JDO對象,甚至是一個簡單的DTO bean(與我的JDO對象匹配)?
我使用下面的代碼強行破解了一個破解,但不喜歡雙重查找。
PersistenceManager pm;
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
List<MyObject> results;
com.google.appengine.api.datastore.Query query = new Query( "MyObject", KeyFactory.stringToKey( parentId ) );
query.addFilter("rank", Query.FilterOperator.GREATER_THAN_OR_EQUAL, minRank );
query.addSort("rank");
query.setKeysOnly();
for (Entity anEntity : datastore.prepare(query).asIterable()) {
results.add( pm.getObjectById( MyObject.class, anEntity.getKey() ) );
}
你可以使用org.datanucleus.store.appengine.JDODatastoreBridge.toJDOResult()
這不是我認為你正在尋找的銀彈; 它需要一些艱苦的工作來完成。
DAO代碼
DatastoreService datastore = DatastoreServiceFactory
.getDatastoreService();
List<Foo> results = new ArrayList<Foo>();
Query query = new Query("Foo", KeyFactory.stringToKey(""));
List<Entity> entities = datastore.prepare(query).asList(
FetchOptions.Builder.withDefaults());
for (Entity entity : entities) {
results.add(new Foo(entity));
}
Foo級
public Foo(Entity entity) {
// TODO get properties from entity and populate POJO
this.bar=entity.getProperty("bar");
//get the key
//if the @PrimaryKey is a Long use this
this.id=entity.getKey().getId();
//if the @PrimaryKey is a String use this
this.id=entity.getKey().getName();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.