将序列插入数据库,Slick 3
Insert Sequence into Database, Slick 3
我想向我的 DAO 添加一个方法,以允许我插入元素列表而不是单个元素,对于我拥有的单个元素:
def add(userGroup: UserGroup): Future[Int] = {
dbConfig.db.run(userGroups += userGroup)
}
文档似乎建议我应该能够像这样使用 ++=
def add(userGroups: Seq[UserGroup]): Future[Int] = {
dbConfig.db.run(userGroups ++= userGroups)
}
http://slick.typesafe.com/doc/3.0.0/queries.html#inserting
但这不起作用,++= 显然不是它所期望的?
++=
向 TableQuery
添加了一个序列。从你的第二个片段来看,你似乎只是将 userGroups: Seq[UserGroup]
添加到自身而不是 TableQuery
实例。
如果您的第一个代码片段有效,则将 userGroups: Seq[UserGroup]
添加到 this.userGroups
也可能有效。
def add(userGroups: Seq[UserGroup]): Future[Int] = {
dbConfig.db.run(this.userGroups ++= userGroups)
}
现在回答这个问题的每个人(使用 Slick 3.2 及更高版本):return 类型不是 Future[Int]
,而是 Future[Option[Int]]
。这样做的原因是并非所有的数据库实际上都return 插入行的数量。文档对其进行了描述 here。
因此较新版本的 Slick 中的代码必须如下所示:
def add(userGroups: Seq[UserGroup]): Future[Option[Int]] = {
dbConfig.db.run(this.userGroups ++= userGroups)
}
我想向我的 DAO 添加一个方法,以允许我插入元素列表而不是单个元素,对于我拥有的单个元素:
def add(userGroup: UserGroup): Future[Int] = {
dbConfig.db.run(userGroups += userGroup)
}
文档似乎建议我应该能够像这样使用 ++=
def add(userGroups: Seq[UserGroup]): Future[Int] = {
dbConfig.db.run(userGroups ++= userGroups)
}
http://slick.typesafe.com/doc/3.0.0/queries.html#inserting
但这不起作用,++= 显然不是它所期望的?
++=
向 TableQuery
添加了一个序列。从你的第二个片段来看,你似乎只是将 userGroups: Seq[UserGroup]
添加到自身而不是 TableQuery
实例。
如果您的第一个代码片段有效,则将 userGroups: Seq[UserGroup]
添加到 this.userGroups
也可能有效。
def add(userGroups: Seq[UserGroup]): Future[Int] = {
dbConfig.db.run(this.userGroups ++= userGroups)
}
现在回答这个问题的每个人(使用 Slick 3.2 及更高版本):return 类型不是 Future[Int]
,而是 Future[Option[Int]]
。这样做的原因是并非所有的数据库实际上都return 插入行的数量。文档对其进行了描述 here。
因此较新版本的 Slick 中的代码必须如下所示:
def add(userGroups: Seq[UserGroup]): Future[Option[Int]] = {
dbConfig.db.run(this.userGroups ++= userGroups)
}