0

我在 playOrm 中有一个映射实体,它有很多属性,比如出生日期、类别等。

假设我第一次使用 NoSqlEntityManager.put 将这个实体保存在 Cassandra 中。我写了以下内容:

NoSqlEntityManager em =...;
Entity e = new Entity();
entity.id = 123
entity.birthDate = 20121212
em.put(e);

在那之后,一段时间后,我执行以下操作:

NoSqlEntityManager em =...;
Entity e = new Entity();
entity.id = 123
entity.categories = {"cat1", "cat2", "cat3"};
em.put(e);

卡桑德拉会发生什么?将创建一个新实体?还是旧的会更新(可取的)?如果更新,birthDate 会在我的第二次写入中被删除吗?(不可取)

4

1 回答 1

1

em.put(e, false); 可用于更新,但它读取一个值主要是因为它必须确定索引是否已更改/已修改。

如果你做 em.put(e),那么数据库中的birthDate 将被更改为 null。

不过这很有趣。我想知道我们是否应该在实体中的每个字段上都有一个标志来表示 null 不会像您的情况那样被写入数据库。如果我们确实有一个 @Column(nullsWritten=false),那么问题就变成了,如果你真的想在特殊情况下写 null,那么在这种情况下你会如何写 null?有任何想法吗?

上面的实体中是否有任何带有@NoSqlIndexable 的字段?

谢谢,院长

于 2012-10-23T19:23:55.717 回答