【问题标题】:How to get inserted object back (with default values from database)?如何取回插入的对象(使用数据库中的默认值)?
【发布时间】:2014-01-22 17:18:30
【问题描述】:

我很好奇如何取回插入的对象。我想在 Play 中的 create API 路由中返回构造的模型对象。

到目前为止,我有类似的东西:

def create(username: String, email: String, password:String)(implicit database: Database): Option[FailureResult]  = {
  database withSession {
    implicit session => {
      val affectedRows = users += new User(username=username, email=email, password=password)
      onlyIf(affectedRows != 1){ UnexpectedErrorResult("Unexpected Error: User was not created") }
    }
}

+= 运算符仅返回受影响的行。有没有办法在不进行其他查找的情况下取回对象?

【问题讨论】:

  • 再次查询有什么意义?您刚刚创建了它并拥有 User 实例,对吧?
  • 为什么不val user=new User(...)?反正有returning方法的插入操作。
  • 数据库可能会设置一些默认值?比如一些日期时间字段什么的?
  • 想想另一个问题How to return multiple values after insert? 可能会有所帮助。

标签: scala playframework slick


【解决方案1】:

您可以使用returning 方法指定一些您希望从插入中返回的列。我已经 seen it 用来取回自动递增的 id,但我想你可以获取所有列并重建对象。

我还可以将您指向my work in progress Slick/Play project,在那里我花了很多时间使这些映射看起来不错。顺便说一下,所有这些都是 Slick 1.0,并且在 2.0 中进行了许多改进,例如 autoinc 的统一语义,这使代码变得更好!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2021-09-23
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多