在我的应用程序中,我将Struts2用于UI,将JPA用于DAO层。和Oracle 11G数据库。
在我的数据库中,我创建了一个序列..
CREATE SEQUENCE "PERK"."EMP_CODE_SEQ" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 501 CACHE 500 NOORDER NOCYCLE ;现在我的需求改变了。根据要求,我想将"TMP“附加到我生成的序列号上。
例如:如果我的序列号是:1,那么它将给我TMP000001。
对于这种情况,SQL查询将如下所示。
select 'TMP'||lpad(EMP_CODE_SEQ.nextval,6, '0') test from dual;但是,有没有办法在JPA中实现上述查询呢?或者,在ORACLE中有什么方法可以更改输出顺序吗?
发布于 2012-10-30 22:36:15
或者在
中有什么方法可以改变输出顺序吗?
不是的。序列仅用于生成编号序列。因此,您不能强制它生成除数字之外的任何其他内容。为此,您需要使用隐式或显式数据类型转换和连接来生成所需格式的字符串。或者,您可以使用to_char函数将序列生成的数字转换为左零填充字符串。
SQL> select to_char(sq_id.nextval, '000000') res
2 from dual
3 /
RES
-------
000004 连接(bars或‘`concat’函数):
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发布于 2012-10-31 13:12:04
我已经通过在JPA setter方法本身中编写逻辑解决了这个问题。以下是JPA实体的示例。
@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;
}
}这里..。因为在设置员工代码时,它将调用一个函数来将所需的前缀连接到序列号。
https://stackoverflow.com/questions/13140381
复制相似问题