【发布时间】:2023-03-14 06:50:01
【问题描述】:
我要做的是以事务方式插入 3 个表,但后面的插入基于第一个。
以下是不同的查询:
val personId = persons returning persons.map(_.id)) += Person(occupation)
translatedProperty += TranslatedProperty(languageId, propertyId, propertyName)
personProperties += PersonProperty(personId, propertyId, propertyValue)
现在我从某处获得Seq(propertyName, propertyValue) 并对其进行迭代。
如果我像上面那样按顺序插入,一切正常,直到它不起作用,因为说数据库“崩溃”。因此,我想以事务方式进行上述插入。
我试过了:
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)
这给了我一个编译错误:
[错误] 发现:Seq[Unit] [错误] 必需:slick.dbio.DBIOAction[?,?,?] [错误] 道具
然后我尝试使用props = (properties.values.map { ...(而不是<-,我使用了=)但无济于事。该人被插入,但从未插入属性。
我在这里做错了什么?
我认为这是因为 props 将是 Seq[FixedSqlAction] 而不仅仅是一个?
我应该提到我在这里使用的是 h2。
【问题讨论】:
标签: database scala h2 slick slick-3.0