【问题标题】:Micronaut Data: create and save new entityMicronaut 数据:创建和保存新实体
【发布时间】:2019-08-10 19:55:29
【问题描述】:

我想在应用程序启动期间保留新实体,如下所示:

class Application(
    private val bookRepository: BookRepository,
) {
    @EventListener
    fun init(event: StartupEvent) {
        val encyclopedia = BookEntity(0, "The sublime source of knowledge")
        val notebook = BookEntity(0, "Release your creativity!")
        bookRepository.saveAll(listOf(encyclopedia, notebook))
    }
}

根据the documentation 这应该可以工作,但由于某种原因我得到javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist 异常。

【问题讨论】:

  • BookEntity 构造函数的第一个参数用于什么?是id吗?
  • 是的,BookEntity 构造函数的第一个参数是 ID。

标签: jpa kotlin micronaut


【解决方案1】:

您将 ID 0 传递给 BookEntity 构造函数以表明它是一个新实体。它适用于 JDBC,但是当您使用 JPA 时,0 必须替换为 null。以下按预期工作:

class Application(
    private val bookRepository: BookRepository,
) {
    @EventListener
    fun init(event: StartupEvent) {
        val encyclopedia = BookEntity(null, "The sublime source of knowledge")
        val notebook = BookEntity(null, "Release your creativity!")
        bookRepository.saveAll(listOf(encyclopedia, notebook))
    }
}

【讨论】:

  • 我不知道你为什么要这么做。为什么不在BookEntity 中有一个只接受String 参数并将id 完全排除在构造函数之外的构造函数?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 2022-01-27
  • 1970-01-01
相关资源
最近更新 更多