PgSQL获取序列问题
PgSQL获取序列的问题
代码:
int total = insertList.size();
int per = 300;
int least = total / per;
int left = total % per;
int index = 0;
List<Medium> list = new ArrayList<>();
SequenceInfo seqInfo = new SequenceInfo();
seqInfo.setSeqName("seq_medium_num");
if (least > 0) {
for (int i = 0; i < least * per; i++) {
Medium medium = insertList.get(i);
String seq = sequenceService.getSeq(seqInfo);
medium .setMediumNum(BizNumUtil.getSeq("ME",seq,4));
medium .setRegisterTime(new Date());
list.add(medium);
if (((i + 1) % per) == 0) {
try {
dao.insertBatch(list);
}catch (BusinessException e){
throw BusinessException.e(e.getErrcode(),e.getErrmsg());
}
//清空
list = new ArrayList<>();
}
}
}
if (left != 0) {
index = least * per;
//清空
list = new ArrayList<>();
for (int i = index; i < total; i++) {
Medium medium = insertList.get(i);
String seq = sequenceService.getSeq(seqInfo);
medium.setMediumNum(BizNumUtil.getSeq("ME",seq,4));
medium.setRegisterTime(new Date());
list.add(medium);
}
try {
dao.insertBatch(list);
}catch (BusinessException e){
throw BusinessException.e(e.getErrcode(),e.getErrmsg());
}
}
service代码:
/**
* 获取公共序列
* @param sequenceInfo
* @return
*/
public String getSeq(SequenceInfo sequenceInfo) {
return this.sequenceDao.getSeq(sequenceInfo);
};
dao代码
/**
* 获取公共序列
* @param sequenceInfo
* @return
*/
public String getSeq(SequenceInfo sequenceInfo);
xml代码:
<select id="getSeq" resultType="java.lang.String" parameterType="SequenceInfo" statementType="STATEMENT">
select nextval('${seqName}')
</select>
String seq = sequenceService.getSeq(seqInfo);
批量插入获取序列导致序列相同
xml代码:
<select id="getSeq" resultType="java.lang.String" parameterType="SequenceInfo" statementType="STATEMENT" useCache="false" flushCache="true">
select nextval('${seqName}')
</select>


浙公网安备 33010602011771号