私がしようとしているのはトランザクションで3つのテーブルに挿入することですが、後者の挿入は最初のテーブルに基づいています。ここでSlick 3 - 他のテーブルに基づいて複数のテーブルにトランザクション的に挿入
は明確なクエリです:
val personId = persons returning persons.map(_.id)) += Person(occupation)
translatedProperty += TranslatedProperty(languageId, propertyId, propertyName)
personProperties += PersonProperty(personId, propertyId, propertyValue)
は、今私はどこからSeq(propertyName, propertyValue)
を取得し、その上で繰り返します。
上記のように順番に挿入すると、データベースがクラッシュするなどの理由で、すべて機能しなくなるまですべてが機能します。したがって、上記の挿入をトランザクション的に行いたいと思います。
は、私はそうしようとした:私は、その後props = (properties.values.map { ...
(代わりの
<-
私は
=
を使用)とが、無駄にしようとした
[error] found : Seq[Unit] [error] required: slick.dbio.DBIOAction[?,?,?] [error] props <- (properties.values.map
:
val dbAction = (for {
val personId = persons returning persons.map(_.id)) += Person(occupation)
props <- (properties.values.map {
x =>
{
val name = x.key
val value = x.value
translatedProperties += TranslatedProperty(languageId, propertyId, name)
personProperties += PersonProperty(personId, propertyId, value)
}
})
} yield()).transactionally
db.run(dbAction)
これは私にコンパイルエラーが発生します。人は挿入されますが、プロパティは挿入されません。
私はここで間違っていますか?
props
はちょうど1つではなくSeq[FixedSqlAction]
になると思われますか?
私はここでh2を使用していることを言及する必要があります。