在 Slick 2.0 中插入后返回 AutoInc ID
Posted
技术标签:
【中文标题】在 Slick 2.0 中插入后返回 AutoInc ID【英文标题】:Returning AutoInc ID after Insert in Slick 2.0 【发布时间】:2014-03-20 14:28:51 【问题描述】:我一直在寻找这个问题的答案。 slick 2.0 上没有太多信息。下面是我的 Addresses 模型的代码,我如何让方法 create 在插入后返回 id?
package models
import play.api.Play.current
import play.api.db.slick.Config.driver.simple._
import play.api.db.slick.DB
object Addresses
val DB_URL:String = "jdbc:h2:mem:fls-play"
val DB_driver:String = "org.h2.Driver"
class Addresses(tag: Tag) extends Table[(String, String, String, String, String)](tag, "ADDRESSES")
def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
def city = column[String]("CITY")
def stateName = column[String]("STATE_NAME")
def street1 = column[String]("STREET1")
def street2 = column[String]("STREET2")
def zip = column[String]("ZIP")
def * = (city, stateName, street1, street2, zip)
val addresses = TableQuery[Addresses]
def create(city:String, stateName:String, street1:String, street2:String, zip:String)
DB.withSession implicit session =>
addresses += (city, stateName, street1, street2, zip)
谢谢!
【问题讨论】:
how do i return an sequence generation for the id using Scala Slick 的可能重复项 @barnesjd 我认为这个答案涉及 slick 1.0。 @MartinKolinek 啊,确实......很好。 【参考方案1】:试试
(addresses returning addresses.map(_.id)) += (city, stateName, street1, street2, zip)
没测试过,但是显示here
【讨论】:
非常感谢,我不敢相信我错过了。 @Martin 那么你回答方法调用的主体是什么?你不能使用元组以某种方式减少代码吗?我不喜欢我们必须重复列。希望您能澄清这段代码的实际位置?这和 * = 方法在同一个地方吗? @Blankman 如果你已经有一个列的元组,你应该可以使用(add returning add.map(_.id)) += tuple
之类的东西。如果这就是你要问的。
顺便说一下,要映射使用returning
的结果(例如,只插入某些列),您必须在使用returning
的之前 使用映射。然后您可以像往常一样拨打insert
。例如,addresses.map(row => (row.name, row.desc)).returning(addresses.map(_.id)).insert(("Name", "Desc"))
为什么 userId(在文档 sn-p 中)是 FixedSqlAction[Int, NoStream, Effect.Write] 类型的?如何从中获取 id?【参考方案2】:
如果你有默认值的字段,你可以试试这个
addresses.map(c => (c.city, c.stateName, c.street1)) returning addresses.map(_.id) += (city, stateName, street1)
【讨论】:
不错的一个!我一直在寻找这个。谢谢以上是关于在 Slick 2.0 中插入后返回 AutoInc ID的主要内容,如果未能解决你的问题,请参考以下文章
是否有使用 Postgres 的 Slick 2.0 AutoInc 的工作示例?