使用其他列值更新表列[ExposedKotlin]

rfbsl7qr  于 2022-11-16  发布在  Kotlin
关注(0)|答案(1)|浏览(114)

公开版本:0.28.1
Kotlin版本:1.5.0
数据库:PostgreSQL 9.4
你好,我是一个新的开放式ORM框架。我需要更新一个表列值与另一个列值在同一个表中,这两个列类型是日期时间。在PostgreSQL上会是这样的:

update order_details set production_date = current_timestamp - registry_date

我如何在公开的ORM上执行此操作?这是我的实体:

object OrderDetails : Table (name = "detalle_orden") {
    val id = integer("id").autoIncrement("detalle_orden_id_seq")
    val sellDetail = integer("detalle_venta").references(SellDetails.id)
    val order = integer("orden")
    val registryDate = datetime("fecha_registro")
    val registryHour = varchar("hora_registro", 30).nullable()
    val productionDate = datetime("fecha_produccion").nullable()
    val productionHour = varchar("hora_produccion", 30).nullable()
    val finishedDate = datetime("fecha_terminado").nullable()
    val finishedHour = varchar("hora_terminado", 30).nullable()
    val deliveryDate = datetime("fecha_entregado").nullable()
    val deliveryHour = varchar("hora_entregado",30).nullable()
    val observations = varchar("observaciones", 500)

    override val primaryKey = PrimaryKey(id, name = "detalle_orden_pkey")
}
v8wbuo2f

v8wbuo2f1#

正如Tapac在评论中所说,这个用例在wiki中:https://github.com/JetBrains/Exposed/wiki/DSL#update

OrderDetails.update({ OrderDetails.id eq 8 }) {
    with(SqlExpressionBuilder) {
       it.update(OrderDetails.productionDate, OrderDetails.registryDate + OffsetDateTime.now())
       // or 
       it[OrderDetails.productionDate] = OrderDetails.registryDate + OffsetDateTime.now())
    }
}

相关问题