object FingerprintsModel extends FingerprintDAO {
// Fingerprint class definition
class FingerprintsTable(tag: Tag) extends Table[Fingerprint](tag, "fingerprints") {
def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
def customerId = column[String]("customer_id", O.NotNull)
def template_one = column[Array[Byte]]("template_one", O.NotNull)
def template_two = column[Array[Byte]]("template_two", O.NotNull)
def created = column[DateTime]("created", O.NotNull)
def updated = column[Option[DateTime]]("updated")
def * = (id, customerId, template_one, template_two) <> (Fingerprint.tupled, Fingerprint.unapply _)
def fingerprint = foreignKey("CUSTOMER", customerId, CustomersModel.customers)(_.id)
}
这是我的插入声明:
FingerprintsModel.fingerprints.map(fi => (fi.customerId, fi.template_one, fi.template_two, fi.created))
.insert((id, fingerprint.template_one, fingerprint.template_two, new DateTime()))
答案 0 :(得分:0)
<强>摘要强>
您需要进行两项主要修改:
TableQuery[FingerprintsTable]
致电insert
(或+=
或++=
);和returning
方法。工作示例
很难从您发布的代码中确切地说出您的想法。下次首先简化您的示例将会很有帮助。
我认为你的模型是这样的:
case class Fingerprint(
id: Long,
customerId: String,
template_one: Array[Byte]
)
我遗漏了其中一个字节数组以及创建和更新的字段,因为它们似乎与问题无关。换句话说,我已经简化了。
FingerprintTable
似乎没问题。我忽略了外键,因为它看起来并不相关。哦,O.NotNull
现已弃用(至少在Slick 3中)。您可以将其关闭,因为您的列不是Option
值。
我们需要的是表格查询,我在FingerprintsModel
内添加:
lazy val fingerprints = TableQuery[FingerprintsTable]
lazy val fingerprintsWithID = fingerprints returning fingerprints.map(_.id)
您可以使用fingerprints
插入数据。但是您已经回复了ID,因此您想使用fingerprintsWithID
。
全部放在一起(再次,在这里使用Slick 3):
object FingerprintExample extends App {
import FingerprintsModel._
val testData = Seq(
Fingerprint(0L, "Alice", Array(0x01, 0x02)),
Fingerprint(0L, "Bob", Array(0x03, 0x04))
)
// A program that will create the schema, and insert the data, returning the IDs
val program = for {
_ <- fingerprints.schema.create
ids <- fingerprintsWithID ++= testData
} yield ids
// Run the program using an in-memory database
val db = Database.forConfig("h2mem1")
val future = db.run(program)
val result = Await.result(future, 10 seconds)
println(s"The result is: $result")
}
制作:
The result is: List(1, 2)