gpt4 book ai didi

scala - 使用 slick 插入后返回自动递增值

转载 作者:行者123 更新时间:2023-12-01 19:02:41 25 4
gpt4 key购买 nike

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

我已经看到了一些关于此的问题,但它们已经相当老了,我希望有一种比按照这个答案建议的更好的方法:Scala & Play! & Slick & PostgreSQL auto increment

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 方法中重新输入模型的字段,这会重复我希望避免的事情。

有更好的方法还是我应该这样做?

我选择的方式是让我的模型保持不变(普通的旧 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()
}

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

最佳答案

您所看到的 autoIncforInsert 投影模式适用于 Slick 1,但不适用于 Slick 2,其中自动递增的值在插入中会自动忽略。请参阅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

关于scala - 使用 slick 插入后返回自动递增值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23924686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com