繁体   English   中英

一种将appengine数据存储实体转换为我的对象的方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM