Scala 使用Play框架和Anorm持久化列表

Scala 使用Play框架和Anorm持久化列表,scala,playframework-2.0,persistence,anorm,Scala,Playframework 2.0,Persistence,Anorm,我目前正在使用Play框架在Scala中开发一个小应用程序,我想保存一个用户操作列表。是否可以像我现在这样使用Anorm来存储一个简单的ID列表(list[Long]) 否则,我还能用什么使它工作呢?我是否需要使用如中所述的ORM?未测试 我认为您需要创建如下的批插入语句: val insertStatement = SQL("""INSERT INTO UserOperations (id) VALUES ({id})""") .asBatch .addBatchPa

我目前正在使用Play框架在Scala中开发一个小应用程序,我想保存一个用户操作列表。是否可以像我现在这样使用Anorm来存储一个简单的ID列表(list[Long])

否则,我还能用什么使它工作呢?我是否需要使用如中所述的ORM?

未测试

我认为您需要创建如下的批插入语句:

  val insertStatement = 
    SQL("""INSERT INTO UserOperations (id) VALUES ({id})""")
   .asBatch
   .addBatchParamsList(List(Seq(1),  Seq(2)))
   .execute()

如果您谈论的是持久化到SQL数据库,那么Anorm肯定可以为您处理

在最基本的级别上,您可以在SQL数据库中创建一个长整数表,然后使用Anorm持久化列表。假设您将整数存储在一个名为
UserActions
的单列表中,该表的唯一一列名为
action

def saveList(list: List[Long]) = {
  DB.withConnection { implicit connection =>
    val insertQuery = SQL("insert into UserActions(action) values ({action})")
    val batchInsert = (insertQuery.asBatch /: list)(
      (sql, elem) => sql.addBatchParams(elem)
    )
    batchInsert.execute()
  }
}
我为你准备了一个小演示,我正在把它推给Heroku,我会很快更新链接(编辑:Heroku和我今晚相处不好,对不起)

代码位于my Github中的以下位置:

在models/UserActions.scala中查找该片段。其余部分只是为了使演示更有趣而做的一些改动


现在,我想退一步,问问自己关于这些用户操作需要什么信息。从语义上讲,这个列表[长]是什么意思?您是否需要存储有关这些用户操作的更多信息?它是否应该像(UserID、pagevisted、Timestamp)中的行一样呢?

Anorm的BatchSql最近已经更新。你可能想看看最新的。

我会再解释一下。我有一个对象用户(有一个表用户来持久化它),我想表示一个对象顺序,它表示一个用户所做的顺序。订单可以由一个或多个项目(->list?)组成,用户可以有多个订单(->list?)。现在,为了保持这一点,我计划在表user中存储一个订单id列表(list[Long]),在表order中存储一个项目id列表(list[Long])。除非你有更好的想法…它正在工作,但你能给我提供添加序列动态列表吗?请创建一个新的stackoverflow问题,包括问题的细节和一些代码。