由于與現有系統的兼容性原因,我必須將 UUID 型別存盤為不帶破折號的 varchar。最簡單的解決方案是什么?
我在下面創建了一個示例類來演示這個問題。當類的實體被持久化時,UUID 在資料庫中很好,只是在tab1_id列中帶有破折號,例如583cfe1a-d671-47f9-9cd5-3f1e8f717856. 我需要的是: 583cfe1ad67147f99cd53f1e8f717856。所以問題是我如何在生成后更改生成的 id。
我使用 spring-boot 和 hibernate 作為 JPA 實作。任何建設性的回應表示贊賞。提前致謝。
@Entity
@Table(name = "tab1")
@XmlRootElement
public class Tab1 implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(
name = "UUID",
strategy = "org.hibernate.id.UUIDGenerator"
)
@Column(name = "tab1_id", updatable = false, nullable = false, columnDefinition = "uuid")
@Type(type = "org.hibernate.type.UUIDCharType")
private UUID tab1Id;
@Column(name = "name")
private String name;
....
uj5u.com熱心網友回復:
您必須實作自定義 ID 生成器,并且您的物體將具有 String 的 ID,因為它不再是有效的 UUID。
像這樣的東西會起作用
@Id
@GenericGenerator(name = "mygen", strategy = "com.abc.generator.IdGenerator")
@GeneratedValue(generator = "mygen")
private String id;
您的生成器將如下所示:
package com.abc.generator;
import java.io.Serializable;
import java.util.UUID;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.IdentifierGenerator;
public class IdGenerator implements IdentifierGenerator {
@Override
public Serializable generate(SharedSessionContractImplementor sharedSessionContractImplementor, Object o)
throws HibernateException {
return UUID.randomUUID().toString().replace("-", "");
}
}
uj5u.com熱心網友回復:
你需要它持久化在資料庫中嗎?如果是這樣的話,我想這是不可能的。但是,如果您想在沒有破折號的情況下檢索它,只需執行物體類的 getUUID 方法即可回傳一個沒有破折號的字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/484563.html
