首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Salat MongoDB DAO findOneById如何

Salat MongoDB DAO findOneById如何
EN

Stack Overflow用户
提问于 2013-11-21 15:58:42
回答 2查看 845关注 0票数 0

我最近开始为MongoDB使用Scala、Akka和Salat序列化库。现在,我正尝试为如下对象设置一个SalatDAO:

代码语言:javascript
复制
import com.novus.salat.annotations._

case class MyObject(@Key("_id) compId: MyCompositeId, value: String)
case class MyCompositeId(x: String, y: String)

我创建了一个DAO,如下所示:

代码语言:javascript
复制
import com.novus.salat.global._
import com.novus.salat.dao._
import com.mongodb.casbah.{MongoURI, MongoConnection}
import com.mongodb.casbah.commons.MongoDBObject

class MyObjectDAO(uri: String, db: String, coll: String) 
  extends SalatDAO[MyObject, MyCompositeId](MongoConnection(MongoURI(uri))(db)(coll))

最后,我编写了一个简单的单元测试:

代码语言:javascript
复制
val dao = new MyObjectDAO(...)

val id = new MyCompositeId("some","key)

// works fine
dao.findOne(MongoDBObject("_id.x" -> id.x, "_id.y" -> id.y))
// does NOT work
dao.findOneById(id)

第一个调用将返回Some(_),而第二个调用将返回None

现在,我查看了findOneById的源代码,试图理解为什么它不起作用:

代码语言:javascript
复制
/** @param id identifier
 *  @return (Option[ObjectType]) Some() of the object found, 
 *          or <code>None</code> if no such object exists
 */
def findOneById(id: ID) =
  collection.findOneByID(id.asInstanceOf[AnyRef]).map(_grater.asObject(_))

在我看来,它闻起来很像一个bug :这个方法是将一个MyCompositeId类型的对象传递给MyCompositeId,而Casbah驱动程序并不理解这个对象。我认为Salat应该在传递对象之前将该对象序列化为MongoDBObject。

我说的对吗?这是个虫子吗?还是我错过了什么?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-21 16:54:26

关于Salat项目票的讨论:https://github.com/novus/salat/issues/110

票数 1
EN

Stack Overflow用户

发布于 2013-11-21 16:19:00

事实证明,复合密钥不受Salat的正式支持,更确切地说,它们只是部分支持。实际上,以下代码起作用:

代码语言:javascript
复制
dao.insert(new MyObject(new MyCompositeId("some","key"), "my data")

也就是说,使用复合键正确地创建MongoDB中的记录:

代码语言:javascript
复制
db.coll.find()
{ "_id" : { "x" : "some", "y" : "key" }, "value" : "my data" }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20125785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档