При переходе с базы данных в памяти на Postgres я столкнулся с проблемой autoInc в Slick и Postgres. Объединив несколько источников, я пришел к следующему решению. Это позволяет избежать предоставления Null для столбца Id при вставке и возвращает идентификатор вставленной записи, но за счет повторения полей для таблицы в 3 разных местах. Есть ли способ улучшить это? особенно для определения без идентификатора, но также и для самой вставки, требующей перечисления полей.
case class Product(
id: Option[Long],
name: String,
description: String
)
object Products extends Table[Product]("products") {
def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
def name = column[String]("name")
def description = column[Int]("description")
def * = id.? ~ name ~ description <> (Product, Product.unapply _) // Fields listed
def withoutId = name ~ description returning id // Fields listed again minus id
def insert(product: Product): Product = {
val id = DB withSession {
withoutId.insert(product.name, product.description) // Fields listed again
}
product.copy(id = Option(id))
}
}