작업하다가 (MariaDb) autoincrement 인가에서 찜찜함을 느낌. 인서트 하자마자 인서트한 값의 시퀀스를 얻으려면 select max( seq ) 를 해줘야 하는데.. 영 찜찜.. 그래서 보니.. idGnrService 라는게 있음. 오라클에선 시퀀스 테이블 사용하면 되니 딱히 필요 없을듯. |
1. 테이블 생성 나는 테이블명을 seqs 로 지정했다. 참고로 NEXT_ID 도 변경해주려 했으나.. 여튼 변경 노노.. CREATE TABLE `seqs` ( `TABLE_NAME` VARCHAR(30) NOT NULL, `NEXT_ID` DECIMAL(30,0) NULL DEFAULT NULL, PRIMARY KEY (`TABLE_NAME`) ) |
2. 인서트 두방 해준다. INSERT INTO SEQS VALUES('NOTICE', 10 ); INSERT INTO SEQS VALUES('BOARD_FILE', 10 ); 키를 생성하면서 전자정부프레임워크에서 이 테이블을 얻데이트 시켜준다. 아래서 설명할건데 blockSize 가 10이면 10씩 늘어난다. |
3. context-idgen.xml 수정 난 NOTICE , BOARD_FILE 두게의 키생성이 필요했다. 두게 만들었다. blockSize 는 10 늘어나고 나서 디비를 얻데이트 하겠다는 의미. table 은 2번에서 생성한 테이블명. tableName 은 2번에서 인서트한 값과 매치. <bean name="noticeIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy"> <property name="dataSource" ref="dataSource" /> <property name="blockSize" value="10" /> <property name="table" value="SEQS" /> <property name="tableName" value="NOTICE" /> </bean> <bean name="boardFileIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy"> <property name="dataSource" ref="dataSource" /> <property name="blockSize" value="10" /> <property name="table" value="SEQS" /> <property name="tableName" value="BOARD_FILE" /> </bean> |
4. 사용하면 된다. serviceImpl.java 에서 사용했는데 @Resource(name = "boardFileIdGnrService") private EgovIdGnrService boardFileIdGnrService; 상단에 이거 넣어서 선언해주고.... String seq_board = boardFileIdGnrService.getNextStringId(); 하면 키 생성 끝. |