分离的实体传递给坚持Kotlin

时间:2018-03-06 18:37:19

标签: hibernate jpa kotlin

当我尝试持久化实体时,会发生以下错误

  

org.hibernate.PersistentObjectException:传递给的分离实体   坚持:xxxxxxx.xxxxxxxx。发票

我的模特

@Entity
@Table(name = "invoices")
class Invoice(
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        var id: Long = -1,
        var date: Date,
        @Column(name = "user_id", unique = true)
        var userId: Long,
        @Column(name = "invoice_number")
        var invoiceNumber: String) : Serializable {

    constructor(date: Date, userId: Long, invoiceNumber: String) : this(-1, date, userId, invoiceNumber)
}

发票对象按照以下方式创建

val invoice = Invoice(Date(), 11111, "abc123")

invoiceDao.create(invoice)

在我的通用dao中,我坚持

fun create(entity: T): T {
    entityManager.persist(entity)

    return entity
}

allopen noarg 包含在我的build.gradle中

1 个答案:

答案 0 :(得分:1)

您已将id字段定义为自动生成但为其指定了默认值。当hibernate尝试持久化它时,它认为该对象表示数据库中的基础行,因为它已经有一个id。因此,它认为它是一个独立的对象。 persist()方法不适用于分离的对象。 您可以将id的默认值设置为null以解决此问题。