我正在寻找一种方法让Hibernate在插入新行时使用Oracle的SYS_GUID()
函数。 目前我的数据库表将SYS_GUID()
设置为默认值,因此如果Hibernate生成省略该值的SQL,则应该可以工作。
我已经使所有内容运行良好,但目前它正在使用系统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)
)
更新:
Mat使用“guid”的解决方案成功,以下是生成的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和进行数据库往返之间做出。