Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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
Java 为什么objectify返回不一致的数据?_Java_Google App Engine_Objectify - Fatal编程技术网

Java 为什么objectify返回不一致的数据?

Java 为什么objectify返回不一致的数据?,java,google-app-engine,objectify,Java,Google App Engine,Objectify,我正在使用objectify 4.0.1的google数据存储来存储消息。每封邮件都附有评论列表 消息id 5708313257836544有16条注释。10:34:08添加了第17条评论。12:01:46的GET显示消息有17条注释,12:02的GET显示消息有16条注释,12:04的GET再次返回17条注释。未删除任何评论 代码如下: @Entity public class Message { @Id private Long id; private List<C

我正在使用objectify 4.0.1的google数据存储来存储消息。每封邮件都附有评论列表

消息id 5708313257836544有16条注释。10:34:08添加了第17条评论。12:01:46的GET显示消息有17条注释,12:02的GET显示消息有16条注释,12:04的GET再次返回17条注释。未删除任何评论

代码如下:

@Entity
public class Message  {
    @Id private Long id;

    private List<Comment> comments;
    //getters and setters
  //equals and hashcode over-ridden using id
}



@Embed
public class Comment  {

    private String message;
    private Date date;

    public String getMessage() {
         return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Date getDate()   {
        return date;
    }

    public int hashCode()   {
        return date.hashCode() * message.hashCode();
    }

    public boolean equals(Object obj)   {
        if (obj==this)
            return true;
        if ( !(obj instanceof Comment) ) 
            return false;
        Comment other = (Comment) obj;
        return other.getMessage().equals(message) && other.getDate().equals(date); 
    }
@实体
公共类消息{
@Id私人长Id;
私人名单评论;
//接球手和接球手
//使用id覆盖等于和哈希代码
}
@嵌入
公开课评论{
私有字符串消息;
私人日期;
公共字符串getMessage(){
返回消息;
}
公共无效设置消息(字符串消息){
this.message=消息;
}
公共日期getDate(){
返回日期;
}
公共int hashCode(){
返回日期.hashCode()*message.hashCode();
}
公共布尔等于(对象obj){
如果(obj==此)
返回true;
如果(!(obj注释实例))
返回false;
注释其他=(注释)obj;
返回other.getMessage().equals(消息)和&other.getDate().equals(日期);
}
我没有使用@Cache注释为这些对象启用缓存


为什么会出现这种不一致性,我该如何防止这种情况?

简而言之,除非您打算在实体中使用祖先,否则数据将以最终一致性存储。这是出于设计。您可以在上阅读更多有关它的信息。

我理解,以最终一致性跨多个节点复制需要时间。我不知道什么我不理解的是,这可能需要90分钟以上。您还没有显示任何获取此信息的代码。如果您的获取代码是一个查询,它将显示最终的一致性。如果它是按键获取,您将看到其他内容-可能您没有安装ObjectifyFilter?