我想将实体属性从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和解析的支持有限。
答案 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会触发它。