2012-10-23 69 views
0

我在playOrm映射实体,其具有大量的属性,如出生日期,类别等等如果id相同,NoSqlEntityManager.put会更新吗?

假设我用NoSqlEntityManager.put保存在卡桑德拉这个实体在第一时间。我写道:

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? (不希望的)

回答

1

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

如果您执行em.put(e),那么数据库中的birthDate将更改为null。

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

你在上面的Entity中有@NoSqlIndexable的任何字段吗?

感谢, 院长

+0

我认为在该领域的属性将是一个外观极好的开端。 – mvallebr

+0

我现在还没有NoSqlIndexable在这个实体中,但将来肯定有 – mvallebr

+0

任何最终的解决方案都会涉及到在put操作中传递一些东西来描述哪些字段应该更新以及哪些字段不应该,如果在极端情况下需要。但是,对于我的情况,我认为使用em.put(e,false)给出的解决方案就足够了。非常感谢,顺便说一下:D – mvallebr

相关问题