Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 数据存储ID Google appengine使用负整数,具体为-1_Google App Engine - Fatal编程技术网

Google app engine 数据存储ID Google appengine使用负整数,具体为-1

Google app engine 数据存储ID Google appengine使用负整数,具体为-1,google-app-engine,Google App Engine,对于我的应用程序,id为-1似乎有问题。应用程序 使用此ID几个月没有出现问题。(我有一代人 从零到无穷大的整数——从Google开始,我将零映射到-1 Appengine不接受ID为零。) 下面的程序只是创建一个新实体 存储它,然后尝试检索它 日志消息显示: TE doGet: finished putting item TE doGet: debug Entity Failed on -1|Key|generation(-1)| 数据存储查看器向我显示两个类型为“GEN”的实体 一个是id

对于我的应用程序,id为-1似乎有问题。应用程序 使用此ID几个月没有出现问题。(我有一代人 从零到无穷大的整数——从Google开始,我将零映射到-1 Appengine不接受ID为零。)

下面的程序只是创建一个新实体 存储它,然后尝试检索它

日志消息显示:

TE doGet: finished putting item
TE doGet: debug Entity Failed on -1|Key|generation(-1)|
数据存储查看器向我显示两个类型为“GEN”的实体 一个是id=1,另一个是id=10001。 当我点击“id=1”时,它显示我

解码的实体键:gen:id=-1>gen-id=1

两个id都是链接。当我点击“id=-1”时,它会说

这个实体不存在

当我点击“GEN:id=1”时,它会为我提供我在其中输入的信息 节目

--导入和抑制已删除的警告以节省空间

public class TE extends HttpServlet{

    private ExperimentUtil eUtil = new ExperimentUtil();

    private static final Logger log = Logger.getLogger(
                   StatusServlet.class.getName());
    public void doGet(HttpServletRequest req, HttpServletResponse resp) 
               throws IOException {
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

long DMyGen = -1;
Key k = KeyFactory.createKey("gen",-1);
PrintWriter out = resp.getWriter();
Entity a;
a = new Entity("GEN",k);
datastore.put(a);
log.info("finished putting item");
out.println("finished putting item");
k = KeyFactory.createKey("generation",DMyGen);
try {
com.google.appengine.api.datastore.Entity e = datastore.get(k);
log.info("debug entity get succeeded");
out.println("debug entity get succeeded");
}
catch (EntityNotFoundException e) {
  log.severe ("debug Entity Failed on "+DMyGen + "|Key|"+k+"|");
}
out.println ("TE finished!");
return;

}
}
谢谢你对这个问题的善意和博学的评论。你们很多人问 为什么会使用否定ID。这当然是一个合理的问题。 我的参与式民主应用程序记录了预算的代数 从零到N的提案。谷歌appengine不接受零的ID。 因此,我加入了一个映射函数,该函数将零映射到-1,并保留其他id 单独地这一点我已改为只添加一个

应用程序运行得更好。我做了一个新的测试。这是新的 二者的版本 程序。如显示的内容所示,这两项都已成功完成 在浏览器上

但是,我在数据存储查看器上看到奇怪的结果 编辑实体:Gen

Decoded entity key: gen: id=4 > GHen: id=10001
(我还用DMyGen=4运行了这个,以及 (她五岁。)

--再次编辑导入语句以节省空间

public class TE extends HttpServlet{

    private ExperimentUtil eUtil = new ExperimentUtil();

    private static final Logger log = Logger.getLogger(StatusServlet.class.getName());
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

long DMyGen = 5;
Key k = KeyFactory.createKey("gen",DMyGen);
PrintWriter out = resp.getWriter();
Entity a;
a = new Entity("GEN",k);
datastore.put(a);
log.info("finished putting item");
out.println("finished putting item");
k = KeyFactory.createKey("gen",DMyGen);
try {
com.google.appengine.api.datastore.Entity e = datastore.get(k);
log.info("debug entity get succeeded");
out.println("debug entity get succeeded");
}
catch (EntityNotFoundException e) {
  log.severe ("debug Entity Failed on "+DMyGen + "|Key|"+k+"|");
}
---****--第二次测试,以查看发电机

public class Te extends HttpServlet{

    private ExperimentUtil eUtil = new ExperimentUtil();

    private static final Logger log = Logger.getLogger(StatusServlet.class.getName());
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Key k;
long DMyGen = 5;
k = KeyFactory.createKey("gen",DMyGen);
PrintWriter out;
out = resp.getWriter();
try {
com.google.appengine.api.datastore.Entity e = datastore.get(k);
log.info("debug entity get succeeded"+e);
out.println("debug entity get succeeded");
}
catch (EntityNotFoundException e) {
  log.severe ("debug Entity Failed on "+DMyGen + "|Key|"+k+"|");
}

是的,我记得我无法用一个负ID保存实体这更像是一个bug报告而不是请求帮助,不是吗?我只是好奇:为什么一开始就使用否定标识符?在我的例子中,它是第三方ID,用于引用,我只是将它们存储为字符串。我对这个第三方系统的作者也有同样的问题:)注意——我更新了文档,以反映我在讨论和当前问题的基础上所做的更改。