【问题标题】:Using existing Database Sequence and creating custom generator使用现有的数据库序列并创建自定义生成器
【发布时间】:2015-08-11 21:52:33
【问题描述】:

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

CREATE SEQUENCE "SCOTT"."ATA_SEQ_USERID" 
MINVALUE 1 MAXVALUE 9999999999999999999999999999 
INCREMENT BY 1 START WITH 1000 CACHE 20 NOORDER NOCYCLE ;

现在,我想将用户名的前两个字母附加到此序列创建的数字上,并在每次新用户注册时使用 Hibernate 生成一个用户 ID。我怎样才能做到这一点?

【问题讨论】:

    标签: oracle hibernate oracle11g sequence


    【解决方案1】:

    终于找到了办法。

    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。

    【讨论】:

      【解决方案2】:

      你只需要使用:

      • 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>
      

      【讨论】:

      • 我需要在我的 web 项目中使用这个序列,然后使用 HQL 生成 id。
      • @AbhineetKumar 啊!好的。我将休眠标签添加回您的问题。对不起,我只能帮助 SQL 查询部分。可以在应用程序中使用查询输出吗?
      • 好吧,如果我能知道你给出的查询的等效 HQL 语句,我认为它可以工作。
      • @AbhineetKumar 太酷了!如果对您有帮助,请将其标记为已回答。会帮助别人。
      • 不,它没有。执行上述查询后,我无法将数据库中的结果放入迭代器或列表中。它说原生 SQL 查询不支持迭代器。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 2016-02-22
      • 2020-12-18
      • 2019-11-10
      相关资源
      最近更新 更多