我正在使用带有objectify 4.0.1的google数据存储来存储邮件。每条消息都附有评论列表。
消息ID 5708313257836544有16条评论。在10:34:08,添加了第17条评论。在12:01:46的GET显示该消息有17条评论,另一条在12:02显示它有16条,而在12:04的下一条再次返回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);
}
我没有使用@Cache注释为这些对象启用缓存。
为什么会发生这种不一致,我该如何预防呢?
答案 0 :(得分:2)
简而言之,除非您要在实体中使用祖先,否则数据将以最终一致性存储。这是设计的。您可以在Balancing Strong and Eventual Consistency with Google Cloud Datastore上了解更多相关信息。