scala - 如何在 Slick 中批量插入或更新多行
问题描述
我有一个光滑的模型,我需要根据 insertOrUpdateCalculations 方法中提供的序列来创建或更新它。如果已经有一行(容器、订单和供应商)体积和重量应该更新。否则应创建新行。
case class OrderCalculation(
id: Long,
container: Long,
order: Long,
vendor: Long,
volume: Double,
weight: Double)
class OrderCalculationTable(tag: Tag)
extends Table[OrderCalculation](tag, "order_calculation") {
def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
def order = column[Long]("containerOrder")
def orderFk =
foreignKey("order_fk", order, orderTbl)(_.id)
def vendor = column[Long]("vendor")
def vendorFk =
foreignKey("vendor_fk", vendor, vendorTbl)(_.id)
def container = column[Long]("container")
def containerFk =
foreignKey("container_fk", container, containerTbl)(_.id)
def volume = column[Double]("volume")
def weight = column[Double]("weight")
override def * = (
id,
container,
order,
vendor,
volume,
weight
) <> ((OrderCalculation.apply _).tupled, OrderCalculation.unapply)
}
我需要实现具有如下签名的方法:
val orderCalculationTbl = TableQuery[OrderCalculationTable]
case class OrderCalculationSummary(
orderId: Long,
containerId: Long,
vendorId: Long,
volume: Double,
weight: Double
)
def insertOrUpdateCalculations(calculations: Seq[OrderCalculationSummary]): Future[Seq[OrderCalculation]] = db.run{
/// insert or update each record here.
}
我的主要问题是如果我在输入值中没有主键(id),但只有 3 个其他值是其他表的外键,如何更新记录。基本上,我需要有一个查询来检查这 3 个字段并在不提供主键的情况下更新现有行或创建新行。
解决方案
推荐阅读
- c - 使用函数为结构变量分配内存
- angular - 如何在没有订阅的情况下接收套接字数据?
- python - 从惯性/传感器框架到车身框架的转换
- amazon-web-services - 无需授权(登录)即可访问的 AWS Amplify Graph API
- python - 通过在运行时传入参数来调用 BDD 场景 [.feature 文件]
- mongodb - 无法再连接到 MongoDB
- google-chrome - 为什么即使我从未打开它,chrome 也总是为这些网站发送这个 dns 请求?
- ios - 自定义 UIView 中的 UITapGestureRecognizer 不起作用
- python - Python selenium Chrome 启动失败:崩溃
- angular - 订阅在构造函数中有效,但 html 返回未定义 - Angular