我有一个在身份映射中使用的域对象(键是对象的Id
属性)。
伪代码:
map = new Mapping();
map[domainObj.Id] = 'foo';
我观察对象告诉我它何时保存到数据库中:
domainObj.bind('saved', function() {
map[domainObj.Id] = 'new foo!'
})
对于新对象,该Id
字段为空并且在保存到数据库之前不会填充。
这就是我的问题。在新对象的情况下,查找“ map[domainObj.Id]
”失败,因为对象的身份在保存后发生了变化!
在这样的身份图中使用对象的最佳方法是什么?
约束:
- 我使用的语言不允许对象作为映射中的键 [JavaScript]
- 保存新对象时必须在服务器上生成该
Id
字段
更新
感谢您的反馈。我真的很想让值对象以与实体相同的方式映射:仅仅因为值对象尚未保存并不意味着它没有要映射到我的应用程序的值。事实上,我误解了身份映射是什么(在重新阅读模式定义后,我发现我并没有真正使用它)。
我想出的解决方案几乎直接来自 Igor 的回答:每个对象在实例化时都会获得一个分配给它的随机 id。它在对象所在的上下文的生命周期内是唯一的、不可变的和不变的。它适用于数据库中的实体和新的实例化。实体的调整是它被设置为匹配对象的真实身份。这使得调试更容易一些。这是我在映射中用作键的值。