반응형
최대 절전 모드를 사용하여 mariadb 시퀀스 nextval이 2씩 증가하고 있습니다.
저는 참조 번호가 있고, 그 안에 3자리 숫자에 대해서는 시퀀스를 사용하고 있습니다.
저는 MariaDB에서 111에서 시작하여 999까지 증가하고 111에서 다시 시작하는 시퀀스를 만들었습니다.이상한 것은 시퀀스가 1이 아니라 2가 증가하고 있다는 것입니다.
시퀀스에 대한 쿼리:
CREATE SEQUENCE IF NOT EXISTS ref_seq START WITH 111 INCREMENT BY 1 MINVALUE=111 MAXVALUE=999 CYCLE ENGINE=INNODB
아래는 코드입니다.
Service
import org.springframework.stereotype.Service;
@Service
public interface SeqForIpe2RefNumService {
int getSeqForIpe2Ref();
}
Service Impl
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.test.ipe.batch.dao.SeqForIpe2RefNumDao;
@Service
public class SeqForIpe2RefNumServiceImpl implements SeqForIpe2RefNumService {
private static final Logger logger = LoggerFactory.getLogger(SeqForIpe2RefNumServiceImpl.class);
@Autowired
SeqForIpe2RefNumDao seqForIpe2RefNumDao;
@Override
public int getSeqForIpe2Ref(){
return seqForIpe2RefNumDao.getSeqForIpe2Ref();
}
}
Dao
import org.springframework.stereotype.Repository;
@Repository
public interface SeqForIpe2RefNumDao {
Integer getSeqForIpe2Ref();
}
DaoImpl
import java.math.BigInteger;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@Repository
public class SeqForIpe2RefNumDaoImpl implements SeqForIpe2RefNumDao {
private static final Logger logger = LoggerFactory.getLogger(SeqForIpe2RefNumDaoImpl.class);
@Autowired
private SessionFactory sessionFactory;
@Override
public Integer getSeqForIpe2Ref() {
logger.info("In getSeqForIpe2Ref() :");
Session session = sessionFactory.getCurrentSession();
SQLQuery crit = session.createSQLQuery("SELECT NEXTVAL(IPE2REF_SEQ_BATCH)");
BigInteger seqNbr = BigInteger.valueOf(0);
if (crit.list().size() > 0) {
seqNbr = (BigInteger) crit.list().get(0);
}
logger.info("SEQUENCE NUM :"+seqNbr.intValue());
return seqNbr.intValue();
}
}
쿼리를 두 번 실행하고 있습니다.
if (crit.list().size() > 0) { // <- first execution
seqNbr = (BigInteger) crit.list().get(0); // <- second execution
}
언급URL : https://stackoverflow.com/questions/75243134/mariadb-sequence-nextval-is-incrementing-by-2-using-hibernate
반응형
'programing' 카테고리의 다른 글
index.php를 실행하는 대신 nginx & php7.3-fpm 다운로드에 대한 다음 클라우드 (0) | 2023.08.01 |
---|---|
봄 부츠가 세션 쿠키를 발행하지 않도록 만드는 방법? (0) | 2023.08.01 |
신속한 전화번호 호출 (0) | 2023.08.01 |
ASP.NET MVC - IsAjaxRequest()는 실제로 무엇을 의미합니까? (0) | 2023.08.01 |
jquery agax FormData()를 여러 파일과 함께 사용하면서 다중 파트/폼 데이터 요청에 대한 경계를 설정하는 방법 (0) | 2023.08.01 |