我目前正在使用Spring / JPA / Google App Engine,我担心的是一个问题。
GAE很酷的是,一旦我的映射被定义,我只需要插入数据,并且存储与之相关的所有内容。
但是,如果我碰巧更改了我的映射,我该如何处理以前的数据?每次更改时我是否必须创建迁移脚本?在这种情况下,有没有办法使用Liquibase或类似的东西?或者是否有其他方法可以处理现有数据的这些变化?
非常感谢你的帮助! 罗尔夫
答案 0 :(得分:1)
这取决于这些变化的性质,但在大多数情况下,至少需要进行一些光更新。要记住的一件大事是父子关系(更多细节见this previous question)和设计时的实体组;因为父母成为实体密钥的一部分,所以他们是非常不可改变的。与键名相同。
另一件事是app引擎实体是无模式的;例如,如果您有一个类Foo
并且突然向其添加了一个属性prop = db.BooleanProperty(default=True)
,则所有现有Foo
实体都不会将prop
设置为True(尽管新的将)。同样,您必须手动管理ReferenceProperty
和ListProperty(db.Key)
。 App Engine确实有一个_set
运算符来帮助解决这个问题,但老实说我发现它有点不可靠,当我知道他们应该知道这个事实时_set
空出来了不是。无论如何,这是使用_set
功能的documentation。