1
我有使用UUID作爲PRIMARY KEY
一個實體,它產生休眠:是否可以修改生成的值?
@Id
@Column(name = "uuid")
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
private UUID uuid;
我怎麼能告訴Hibernate來使用一個明確的值或者我可以修改Hibernate生成的價值?
編輯:我的問題是,在大多數情況下,它的罰款所產生的價值,但在某些情況下,我想有一個明確的UUID創建一個實體。
我的解決方法(ASLO通過以下Dipali Vasani建議)
@Id
@Column(name = "uuid")
private UUID uuid;
/**
* if defined, this will be used instead of the generated one
*/
private transient UUID preferredUuid;
@PrePersist
private void initializeUuid() {
if (preferredUuid != null) {
uuid = preferredUuid;
}
else {
uuid = UUID.randomUUID();
}
}
感謝。我也在使用選項1。你知道這一代何時發生?看起來它發生在@PrePersist之後,所以要使用選項1,我們不需要用任何生成器來裝飾字段。 –
@PrePersist是在實體管理器持久操作實際執行或級聯之前執行的回調。與持久性操作同步。所以你可以去用它。 –
選項2不適用於我。也許我的問題還不清楚。基本上在大多數情況下,生成值是完全正確的,但在少數情況下,我想使用顯式uuid創建一個實體。所以一旦生成它就無法修改這個值了? –