@Id @GeneratedValue但设置自己的 ID 值
我有一个带有生成id的表,但在某些情况下,我想自己设置它。我可以以某种方式强制Hibernate忽略@GeneratedValue吗?
我有一个带有生成id的表,但在某些情况下,我想自己设置它。我可以以某种方式强制Hibernate忽略@GeneratedValue吗?
这可能是一个过度的,但你有没有想过编写自己的CustomIDGenerator,它可能的子类说休眠的自动生成器,并公开了几个方法,您可以在其中设置要生成的下一个类对象的id,例如
class MyGenerator extends .... {
public void setIdForObject(Class clazz, Long id) {
//once you use this API, the next time an object of
//type clazz is saved the id is used
}
public void setIdForObject(Class clazz, Long id, Matcher matcher) {
//once you use this API, the next time an object of
//type clazz is saved and the matcher matches yes the id will be
//assigned. Your matcher can match properties like name, age etc
//to say the matched object
}
}
这可能会变得复杂,但至少可以按照休眠doco进行
虽然这个问题很久以前就被问过了,但我在这篇文章中找到了完美的答案,@lOranger,并希望分享它。
此建议检查对象的当前 ID 是否设置为 以外的其他值,如果是,则使用它,否则,它将使用默认(或已配置)生成策略生成该 ID。null
它简单明了,并解决了@Jens提出的问题,即无法检索对象的当前ID。
我刚刚实现了它(通过扩展UUIDGenerator),它就像一个魅力:-D