【发布时间】:2020-11-15 15:37:41
【问题描述】:
出于文档目的添加此问题,并检查是否有任何替代解决方案。
我有一个实体,它有一个使用 @IdClass 定义的复合键
data class TemplateId(var id: Long? = null, var version: Int = 0) : Serializable
@Entity
@IdClass(TemplateId::class)
data class Template(
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
var id: Long? = null,
@Id
@Column(name = "version")
var version: Int
//Other columns
)
想法是为Template 的不同版本使用相同的ID。插入新模板时,使用序列生成器按预期工作。
但是,当我尝试插入具有相同 ID 的新版本行时,@GeneratedValue 会覆盖给定值并自动增量为新值。
JPA: Override Auto generated ID中提到的解决方案
不工作。
【问题讨论】:
-
只是一个小建议:为什么不使用 Envers?开箱即用支持 AFAIK 这样的场景(每个 id 具有多个修订的实体)
标签: java hibernate kotlin jpa spring-data-jpa