Java 如何在Oracle中生成ID?

Java 如何在Oracle中生成ID?,java,sql,oracle,Java,Sql,Oracle,我想创建sql查询以在Oracle数据库中插入数据 我在ID部分阻塞,在我的JAVA代码中,我生成如下ID @Id @GeneratedValue(generator="system-uuid") @GenericGenerator(name="system-uuid", strategy = "uuid") protected String id; 但我不知道如何在SQL中实现它 谢谢大家! 您将在ID列的insert语句中使用Or

我想创建sql查询以在Oracle数据库中插入数据

我在ID部分阻塞,在我的JAVA代码中,我生成如下ID

@Id
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
protected String id;
但我不知道如何在SQL中实现它


谢谢大家!

您将在
ID
列的insert语句中使用Oracle函数
SYS\u GUID()

您这样做的具体原因是什么?这是数据库将更有效地处理的事情。如果这是一个新表,并且您可以选择,我将使用表中的
标识列来执行此操作

例如(此解决方案在99%的情况下都很好):

或者,如果希望基于guid生成id,可以使用以下语法。请注意,这里的id列仍然是一个数字-格式掩码X将其转换为十六进制值

CREATE TABLE test_tab (
  id NUMBER DEFAULT ON NULL to_number(sys_guid(),'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
    CONSTRAINT test_tab_pk PRIMARY KEY,
  column1  VARCHAR2(10 CHAR)
);
或者,如果必须是guid,则可以将主键列定义为VARCHAR2并存储实际guid。请注意,这不是最佳做法

CREATE TABLE test_tab (
  id VARCHAR2(50) default on null sys_guid()
    CONSTRAINT test_tab_pk PRIMARY KEY,
  column1  VARCHAR2(10 CHAR)
);
在insert语句中,您可以只保留id列,它将自动填充


插入测试选项卡(第1列)值('Foobar')

使用如果不需要,请不要将
UUID
用作数据库中的键;如果您被迫使用它们,请不要对性能感到惊讶。据我所知,该表针对ID列nut integers起诉UUID/GUID!更新了我的答案。从这个问题上,我假设海报的数据库知识是相当基本的,很可能他只是想得到一个合适的键,在这种情况下,序列就可以了。
CREATE TABLE test_tab (
  id VARCHAR2(50) default on null sys_guid()
    CONSTRAINT test_tab_pk PRIMARY KEY,
  column1  VARCHAR2(10 CHAR)
);