Konfiguration von Hibernate mit Oracle ' s SYS_GUID() für die Primär-Schlüssel

Ich bin auf der Suche nach einem Weg, um hibernate zu benutzen, oracle SYS_GUID() - Funktion beim einfügen von neuen Zeilen. Derzeit meine DB-Tabellen haben SYS_GUID() als der Standardwert, so dass, wenn hibernate einfach die generierte SQL weggelassen, dass der Wert, sollte es funktionieren.

Habe ich alles, aber es ist derzeit die Erzeugung der UUID/GUID im code über die system-uuid generator:

@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
@Column(name = "PRODUCT_ID", unique = true, nullable = false)
public String getId() {
    return this.productId;
}

Ist dies in Ordnung, aber ich würde es vorziehen, dass die guids waren von der Datenbank erzeugt, so dass Sie sequentielle und potenziell eine bessere Leistung. Plus, ich würde nur gerne wissen, wie konfigurieren Sie diese.

Ich bin mit annotations für die Konfiguration, aber xml-Konfigurations-Beispiele sind genial als gut.

Hier ist eine Beispiel-Tabelle definition (falls es wichtig ist):

CREATE TABLE SCHEMA_NAME.PRODUCT
(
    PRODUCT_ID RAW(16) DEFAULT SYS_GUID() NOT NULL,
    PRODUCT_CODE VARCHAR2(10 CHAR) NOT NULL,
    PRODUCT_NAME VARCHAR2(30 CHAR) NOT NULL,
    PRODUCT_DESC VARCHAR2(512 CHAR)
)

UPDATE:

Mat ' s sollution mit "guid" gearbeitet, hier ist die sql generiert:

Hibernate: 
    select rawtohex(sys_guid()) 
    from dual
Hibernate: 
    insert into PRODUCT
    (PRODUCT_CODE, PRODUCT_DESC, LOB_ID, PRODUCT_NAME, PROVIDER_ID, PRODUCT_ID) 
    values (?, ?, ?, ?, ?, ?)

Es scheint, dass die Verwendung der Spalten mit default-Wert in einem insert ist nicht möglich, so ist die Wahl zwischen einer Anwendung generierte guid und einer Datenbank hin-und Rückfahrt.

InformationsquelleAutor Ryan Cook | 2009-05-11
Schreibe einen Kommentar