【发布时间】:2018-03-06 18:37:18
【问题描述】:
当我尝试持久化实体时,出现以下错误
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 中
【问题讨论】:
-
您的 id 属性是否有默认值?这可能是问题所在。
-
您已将 id 字段定义为自动生成,但为其分配了默认值。当 hibernate 尝试持久化它时,它认为该对象代表数据库中的底层行,因为它已经有一个 id。因此,它认为它是一个分离的对象。
-
如何在 Kotlin 中做到这一点?将 null 设置为 id?
-
我还没有完成 Kotlin。我想只要你不分配任何东西,它就会被认为是 null。
-
@Sashi 设置
var id: Long? = null现在可以使用。请发布答案,以便我可以接受您的:D