2

我正在使用 slick 2.0.1(如果需要可以升级),我想从数据库(postgresql)中检索自动递增值。

我已经看到了一些关于 SO 的问题,但是它们已经相当老了,我希望有比这个答案建议的更好的方法:Scala & Play!& Slick & PostgreSQL 自动增量

def autoInc = name ~ price ~ description returning id

def add(product: Product)(implicit s:Session): Long = {
    Products.autoInc.insert(p.name, p.price, p.description)
}

您必须在 autoInc 方法中重新输入模型的字段,这会重复我希望避免的事情。

有没有更好的方法或者我应该这样做?

我选择的方式是让我的模型 poso (普通的旧 scala 对象,如):

case class Product(.....)

然后我的 dao 类看起来像:

class ProductDao extends ProductDao {
  class Products(tag: Tag) extends Table[Product](tag, "products") {

     def id = ...
     def name = ..

     def * = (id, name) <> (Product.tupled, Product.unapply)

  }

  val products = TableQuery()
}

另外作为旁注,对于 * 方法,我是否必须输入所有类似的属性,或者还有更好的方法吗?

4

1 回答 1

5

您看到的autoIncor投影模式适用于 Slick 1 但不适用于 Slick 2,其中自动递增的值在插入时会被自动忽略。forInsert请参阅http://slick.typesafe.com/doc/2.0.2/migration.html#inserting

你能比重复你的列名更好吗?或者您的数据模型工件的多种表现形式?代码生成是一种方法:http ://slick.typesafe.com/doc/2.0.2/code-generation.html 我将在 Scala 日讨论这个问题。

对于返回 id 使用returning就像在 Slick 1 中一样。http://slick.typesafe.com/doc/2.0.2/queries.html#inserting

于 2014-05-29T02:33:09.507 回答