appengine datastore更改实体属性

时间:2012-03-19 21:17:23

标签: java google-app-engine google-cloud-datastore jdo jodatime

我想将实体属性从String更改为long。我已经看到Nick在Change IntegerProperty to FloatProperty of existing AppEngine DataStore中回答了类似的问题,但我用Java编写并需要一些代码示例,因为我对mapreduce一无所知。

e.g。我们想将userId从String改为this class的长。

我也希望得到关于我将日期存储在long而不是String中的建议,以便可以从android,GWT等更多地消耗时间信息(通过Rest Json或RPC)。目前,GWT没有Jodatime,它对Java.util.Date和解析的支持有限。

3 个答案:

答案 0 :(得分:1)

你的持久性接口是什么? JDO(我的),JPA,Objectify,Twig,原始的GAE / J API?我不认为很多人在不知情的情况下可以给你一个代码示例。

另外,请提供您现有的代码摘录(基础日期时间,我推测)持久性实体,包括您所谈论的数据成员。

答案 1 :(得分:1)

如果您真的想要从String转换为Long,除了使用原始GAE编写转换片段之外,我看不到任何其他选择,例如:

import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;

Query q = new Query (Task.class.getName());
PreparedQuery pq = DatastoreServiceFactory.getDatastoreService ().prepare (q);
for (Entity entity : pq.asIterable ())
{
    String orig = entity.getProperty ("userId").toString ();
    entity.removeProperty ("userId");
    entity.setProperty ("userId", Long.parseLong (orig));
}

答案 2 :(得分:1)

您的班级正在使用JPA而不是JDO。 GAE JPA插件的最新版本(v2.x)允许将(java.util。)Date持久化为Long或String。这不符合您的数据迁移(请参阅Jonathan的回复),但允许您将未来的Date字段保留为Long。 IIRC你可以指定“jdbcType”(DataNucleus扩展注释),因为INTEGER会触发它。