仅在 Micronaut Data 中非空时指定查询中的字段

问题描述 投票:0回答:1

以下是我使用 Micronaut 框架编写的 Kotlin 代码的一部分:

import io.micronaut.data.annotation.MappedEntity
import jakarta.persistence.GeneratedValue
import jakarta.persistence.Table

@MappedEntity
@Table(name = "special", schema = "abc")
data class SpecialEntity(
    val uuid: Uuid,

    @GeneratedValue
    val createdAt: Instant? = null
)
import io.micronaut.data.jdbc.annotation.JdbcRepository
import io.micronaut.data.repository.kotlin.CoroutineCrudRepository
import java.util.UUID

@JdbcRepository
interface SpecialEntityRepository : CoroutineCrudRepository<SpecialEntity, UUID> {
    suspend fun saveAll(entities: Iterable<SpecialEntity>): ArrayList<SpecialEntity>
}

我面临的问题是,由于

GeneratedValue
注释,Micronaut 从用于将实体插入数据库的查询中省略了该字段。这就是我最初想要的。但现在有一个用例有时需要手动设置该值。

我已经检查了其他注释,例如

@DateCreated
,它不起作用,因为它总是设置当前时间戳。
@Query
注释也不起作用,因为查询需要是静态的,但我需要进行批量插入。

基本上我想要的是当字段非空时将该字段包含在插入查询中。当它为空时,应该从查询中省略它。最好的方法是什么?

java kotlin jpa micronaut
1个回答
0
投票

@ColumnTransformer(write = "COALESCE(?, now())")
成功了!

© www.soinside.com 2019 - 2024. All rights reserved.