Oracle 使用现有数据库序列并创建自定义生成器

Oracle 使用现有数据库序列并创建自定义生成器,oracle,hibernate,oracle11g,sequence,Oracle,Hibernate,Oracle11g,Sequence,我在数据库中创建了一个序列,如下所示: CREATE SEQUENCE "SCOTT"."ATA_SEQ_USERID" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1000 CACHE 20 NOORDER NOCYCLE ; 现在,我想将用户名的前两个字母附加到这个序列创建的数字上,并在每次新用户注册时使用Hibernate生成一个用户id。我该怎么做 您只需使用: SUBSTR

我在数据库中创建了一个序列,如下所示:

CREATE SEQUENCE "SCOTT"."ATA_SEQ_USERID" 
MINVALUE 1 MAXVALUE 9999999999999999999999999999 
INCREMENT BY 1 START WITH 1000 CACHE 20 NOORDER NOCYCLE ;
现在,我想将用户名的前两个字母附加到这个序列创建的数字上,并在每次新用户注册时使用Hibernate生成一个用户id。我该怎么做

您只需使用:

  • SUBSTR功能
  • 串联运算符
    |
比如说,

SQL> CREATE SEQUENCE s;

Sequence created.

SQL>
SQL> SELECT substr(ename, 1, 2)||s.nextval custom_seq FROM emp;

CUSTOM_SEQ
------------------------------------------
SM1
AL2
WA3
JO4
MA5
BL6
CL7
SC8
KI9
TU10
AD11
JA12
FO13
MI14

14 rows selected.

SQL>

终于找到了办法

String sql = "select MY_SEQ_ID.nextval from dual";
        SQLQuery query = session.getCurrentSession().createSQLQuery(sql);
        List idList=query.list();
        BigDecimal number=(BigDecimal) idList.get(0);
        System.out.println(number);

其中MY_SEQ_ID是我的序列ID。

我需要在我的web项目中使用此序列,然后使用HQL生成ID。@AbhineetKumar Ah!好啊我将hibernate标记添加回您的问题。很抱歉,我只能在SQL查询部分提供帮助。你能在应用程序中使用查询输出吗?好吧,如果我能知道你给出的查询的等价HQL语句,我认为它可以工作。@AbhineetKumar,太酷了!如果它对您有帮助,请标记为已回答。会帮助别人。不,不会。在执行上述查询后,我无法将结果从数据库输入到迭代器或列表中。它说在本机SQL查询中不支持迭代器。