Micronaut 数据 jdbc:保存现有实体会创建一个新实体,而不是更新现有实体

Micronaut data jdbc: saving an existing entity creates a new entity instead of updating the existing one

我有以下 Kotlin 代码:

val book = bookRepository
        .findById(1)
        .orElseThrow { DoesNotExistException("Book with ID 1 does not exist") }

bookRepository.save(book)

我希望这段代码再次保存同一个实体。但是,它实际上通过复制所有字段并更改 ID 来生成一个新实体。

实体本身在这里:

@Entity
data class Book(@Id
                @GeneratedValue
                var id: Long?,
                val status: Book.Status
)

我正在使用 micronaut-data(以前名为 Micronaut Predator)和 JDBC,我没有使用 JPA。

如何在不创建新实体的情况下更新现有实体?

这就是它设计的方式。从文档:https://micronaut-projects.github.io/micronaut-data/snapshot/guide/#jdbcQuickStart,向下滚动到 "Updating an Instance (Update)" 部分:

With Micronaut Data JDBC, you must manually implement an update method since the JDBC implementation doesn’t include any dirty checking or persistence session notion. So you have to define explicit update methods for updates in your repository.