scala salat objectid在插入数据库后正在改变

时间:2014-06-25 11:00:28

标签: mongodb scala spray salat

我在scala中遇到了Salat库的问题 - 我有一个案例类项目:

case class Item(_id: ObjectId = new ObjectId, var name: String, var active: Boolean) extends WithId {
  override def id: Option[ObjectId] = Some(_id)
}

_id字段是在Item实例化时创建的。

我正在尝试按如下方式测试插入项目的功能:

  var itemObj = Item(name = "testItem", active = true)

  "MainService" should {
    "put an item into database" in {
      Put("/items/", itemObj) ~> mainRoute ~> check {
        val item = responseAs[Item]
        item.name === "testItem"
        item.active === true
        item._id === itemObj._id
        Item.findAll().toList.size === 1
      }
    }
}

PUT / items / mapping对应于Spray HTTP Route:

put {
      entity(as[Item]) { item ⇒
        complete {
          Item.saveOrUpdate(item)
          logger.info("putting item {}", item)

          HttpResponse(
            StatusCodes.OK,
            HttpEntity(ContentTypes.`application/json`, grater[Item].toCompactJSON(item))
          )
        }
      }
    }

saveOrUpdate 定义如下:

  def saveOrUpdate(t: T) = {
    t.id match {
      case Some(id) => dao.update(MongoDBObject("_id" -> id), t, false, false, new WriteConcern)
      case None => dao.insert(t)
    }

现在,问题是断言的测试失败

item._id === itemObj._id

如果我在保存或更新实体之前进行设置,我不知道为什么会改变_id。

有没有人知道为什么会这样做?我该怎么做才能解决这个问题?

最佳, 马尔钦

1 个答案:

答案 0 :(得分:0)

我将JSON库从json4s更改为Spray Json,现在似乎可以正常工作。