programing

최대 절전 모드를 사용하여 mariadb 시퀀스 nextval이 2씩 증가하고 있습니다.

powerit 2023. 8. 1. 20:52
반응형

최대 절전 모드를 사용하여 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

반응형