首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在生成的序列号中附加字符串

问如何在生成的序列号中附加字符串
EN

Stack Overflow用户
提问于 2012-10-30 21:46:20
回答 2查看 11.9K关注 0票数 2

在我的应用程序中,我将Struts2用于UI,将JPA用于DAO层。和Oracle 11G数据库。

在我的数据库中,我创建了一个序列..

代码语言:javascript
复制
CREATE SEQUENCE  "PERK"."EMP_CODE_SEQ"  MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 501 CACHE 500 NOORDER  NOCYCLE ;

现在我的需求改变了。根据要求,我想将"TMP“附加到我生成的序列号上。

例如:如果我的序列号是:1,那么它将给我TMP000001。

对于这种情况,SQL查询将如下所示。

代码语言:javascript
复制
select 'TMP'||lpad(EMP_CODE_SEQ.nextval,6, '0') test from dual;

但是,有没有办法在JPA中实现上述查询呢?或者,在ORACLE中有什么方法可以更改输出顺序吗?

EN

回答 2

Stack Overflow用户

发布于 2012-10-30 22:36:15

或者在

中有什么方法可以改变输出顺序吗?

不是的。序列仅用于生成编号序列。因此,您不能强制它生成除数字之外的任何其他内容。为此,您需要使用隐式或显式数据类型转换和连接来生成所需格式的字符串。或者,您可以使用to_char函数将序列生成的数字转换为左零填充字符串。

代码语言:javascript
复制
SQL> select to_char(sq_id.nextval, '000000') res
  2    from dual
  3  /

  RES
-------
 000004 

连接(bars或‘`concat’函数):

代码语言:javascript
复制
SQL> select 'TMP' || to_char(sq_id.nextval, '000000') res
  2    from dual
  3  /

RES
----------
TMP 000006

SQL> select concat('TMP',to_char(sq_id.nextval, '000000')) res
  2    from dual
  3  /

RES
----------
TMP 000007
票数 4
EN

Stack Overflow用户

发布于 2012-10-31 13:12:04

我已经通过在JPA setter方法本身中编写逻辑解决了这个问题。以下是JPA实体的示例。

代码语言:javascript
复制
@Entity
@Table(name = "MST_EMP")
public class MstEmp implements Serializable, IsEntity {
    private static final long serialVersionUID = 1L;

    @Id 
    @Column(name = "EMP_CODE")
    @SequenceGenerator( name = "appEmpSeq", sequenceName = "EMP_CODE_SEQ")  
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "appEmpSeq" )
    private String empCode;


    public MstEmp() {
    }

    public String getEmpCode() {
        return this.empCode;
    }

    public void setEmpCode(String empCode) {        
        this.empCode =  getSequencePrefix(empCode)+empCode;
    }



    /**
     * FUNCTION USED TO GENERATE SEQUENCE PREFIX: TEMP+"REQUIRED ZEROs"+EMP CODE
     * @param empCode
     * @return
     */
    public String getSequencePrefix(String empCode){
        String temp = "TEMP";
        if(empCode.length()<6){
            int zeroCount = 6 - empCode.length();

            for(int index=0;index<zeroCount;index++){
                temp = temp + "0";
            }
        }
        return temp;
    }
}

这里..。因为在设置员工代码时,它将调用一个函数来将所需的前缀连接到序列号。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13140381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档