Objectify 中的延迟保存适用于每个 Java 实体还是每个 Google Cloud Datastore 实体?

Does deferred save in Objectify apply per Java entity or per Google Cloud Datastore entity?

我们的应用程序逻辑有多个层。每次调用保存时,域层上的实体都会映射到数据库实体。

例如:

class Sample(); // the domain entity

@Entity("Sample")
@Cache
class DatabaseSample; // the database entity

假设修改了域实体并调用了保存,这会将所有属性映射到一个新的数据库实体,然后保存该实体延迟

让我们假设同一个域实体被再次修改并再次保存,这将再次将所有属性映射到一个新的数据库实体并调用延迟保存。

两个独立的 Google Cloud Datastore 实体是否会相互竞争,例如较新的保存完全覆盖旧的保存,或者将对象化在请求期间收集修改后的键值对并在请求结束时保存合并的实体?

我不太明白这个问题,但我会尝试为您提供一些可能有帮助的背景信息。

如果您延迟保存实体 POJO,它只会在会话中将其标记为 "save this thing"。当会话关闭(事务结束)时,任何标记为延迟保存(或删除)的内容都会被保存。

只有在保存到数据存储的那一刻,POJO 才会映射到低级实体。您可以将同一个对象推迟无数次而没有实际效果。事实上,这是核心用例——您可能有一个设置更改某些数据并想要保存的方法,以及其他一些更改某些数据并想要保存的方法……通过使用延迟保存,您可以避免将单独的真实保存到数据存储区。

如果你问的是做一些非常疯狂的事情,比如在推迟保存后改变 @Id...不要。我真的不知道那会做什么,但你可能不会喜欢它:-)