使用现有的数据库序列并创建自定义生成器
Using existing Database Sequence and creating custom generator
我在我的数据库中创建了一个序列如下:
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。
我在我的数据库中创建了一个序列如下:
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。