Java 开发 2.0: NoSQL
2010-07-20 00:00:00 来源:WEB开发网当清单 9 中的 getRunners方法调用时,一个 Runner实例集合将从底层的 id集合创建。这样,一个新方法(getEntity)将在 Model类中创建,如清单 10 所示:
清单 10. 从一个 id 创建一个实体
def getEntity(entityType, id){
def key = KeyFactory.createKey(entityType, id)
return this.@datastore.get(key)
}
getEntity方法使用 Google 的 KeyFactory类来创建底层键,它可以用于查找数据存储中的一个单独实体。
最后,定义一个新的构造函数来接受一个实体类型,如清单 11 所示:
清单 11. 一个新添加的构造函数
public Model(Entity entity){
this.@entity = entity
}
如清单 9、10和 11、以及 图 1的对象模型所示,我可以将一个 Runner添加到任一 Race,也可以从任一 Race获取一列 Runner实例。在清单 12 中,我在这个等式的 Runner方上创建了一个类似的联系。清单 12 展示了 Runner类的新方法。
清单 12. 参赛者及其比赛
def addRace(race){
if(this.@entity.races){
this.@entity.races << race.id
}else{
this.@entity.races = [race.id]
}
}
def getRaces(){
return this.@entity.races.collect {
new Race( this.getEntity(Race.class.simpleName, it) )
}
}
这样,我就使用一个无模式数据存储创建了两个域对象。
通过一些参赛者完成这个比赛
此前我所做的是创建一个 Runner实例并将其添加到一个 Race。如果我希望这个关系是双向的,如 图 1中我的对象模型所示,那么我也可以添加一些 Race实例到一些 Runner,如清单 13 所示:
更多精彩
赞助商链接