Java 为什么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条注释。未删除任何评论 代码如下: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
@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?