SYS_GUID()
新しい行を挿入するときにOracleの関数を使用するために休止状態にする方法を探しています。現在、私のDBテーブルはSYS_GUID()
デフォルトとして使用されているため、hibernateが値を省略したSQLを単純に生成した場合は、機能するはずです。
すべてが機能していますが、現在、system-uuidジェネレーターを使用してコードでUUID/GUIDを生成しています。
@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;
}
これは問題ありませんが、GUIDがデータベースによって生成されたものであることが望ましいので、それらはシーケンシャルであり、パフォーマンスが向上する可能性があります。さらに、これを構成する方法を知りたいだけです。
構成にアノテーションを使用していますが、xml構成の例も素晴らしいです。
これがサンプルテーブル定義です(重要な場合):
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)
)
アップデート:
「guid」を使用したMatのソリューションは機能しました。生成されたSQLは次のとおりです。
Hibernate:
select rawtohex(sys_guid())
from dual
Hibernate:
insert into PRODUCT
(PRODUCT_CODE, PRODUCT_DESC, LOB_ID, PRODUCT_NAME, PROVIDER_ID, PRODUCT_ID)
values (?, ?, ?, ?, ?, ?)
挿入で列のデフォルト値を使用することはできないようです。そのため、アプリケーションで生成されたGUIDとデータベースのラウンドトリップのどちらかを選択できます。