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

时间:2019-08-05 16:49:02

标签: jdbc kotlin micronaut

我有以下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
)

我在JDBC中使用micronaut-data(以前称为Micronaut Predator),而不在使用JPA。

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

1 个答案:

答案 0 :(得分:3)

这是设计使然的方式。从文档:https://micronaut-projects.github.io/micronaut-data/snapshot/guide/#jdbcQuickStart,向下滚动到“更新实例(更新)”部分:

  

对于Micronaut Data JDBC,您必须手动实现更新方法,因为JDBC实现不包含任何脏检查或持久性会话概念。因此,您必须为存储库中的更新定义显式更新方法。