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>

posted @ 2022-06-01 14:46  EmptyJar  阅读(670)  评论(0)    收藏  举报