Table Id Generation Service를 커스텀하고 싶습니다.(3)
- 작성자 :
- 질*
- 작성일 :
- 2019-03-05 16:22:33
- 조회수 :
- 1,359
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
안녕하세요. 번거롭게 자꾸 질문을 드리게 되네요...^^; 2번 질문글을 살펴보니 제가 잘못 적어둔 내용이 있었습니다. 시퀀스 타입의 id gnr는 사용하지 않고 table id 기반 gnr를 사용 중인게 맞습니다. 제가 샘플소스코드에 시퀀스타입 설정까지 같이 넣어둬서 혼동을 드렸네요.
여튼 말씀하신 것처럼 table id 기반 id gnr를 사용한다면 본인이 만든 SEQ 테이블에 있는 table_name의 next_id 값에 +1한 값이 다음 pkid로 되는건 알고 있습니다. (blocksize가 1일 경우이고 blocksize가 1 이상이면 내부적으로 계산된 뒤 증가하구요...) 그런데 egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl를 살펴보니 아래 소스를 기준으로 "COMTECOPSEQ"라는 SEQ테이블에 "ADBK_ID"라는 table_name이 없다면 Object insertInitId(final boolean useBigDecimals, final int blockSize)를 통해 "ADBK_ID"를 INSERT 해준 뒤, NEXT_ID 값을 0으로 초기값으로 잡아서 넣어주더라고요. 그 뒤에는 1씩 증가하게 되구요.
<bean name="egovAdbkIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
<property name="dataSource" ref="egov.dataSource" />
<property name="strategy" ref="adbkIdStrategy" />
<property name="blockSize" value="10"/>
<property name="table" value="COMTECOPSEQ"/>
<property name="tableName" value="ADBK_ID"/>
</bean>
insertInitId(...) 내부를 살펴보니 아래 소스를 통해 next_id의 초기값이 정해지는 거 같은데 [COMTECOPSEQ테이블에 지정한 ID Key의 값이 "ADBK_ID" 일때 NEXI_ID 컬럼 값이 1이면 getNextStringId() 메소드의 결과로 1을 리턴 받을수 있습니다.] 라는 답변 내용을 연관지을 부분을 찾을 수가 없습니다. 저는 이처럼 처음 초기값을 insert해줄 때 1부터 시작되게 하고 싶습니다. 처음 주셨던 답변으로는 해결이 안 되네요 ㅠㅠ
if (useBigDecimals) {
initId = new BigDecimal(blockSize);
} else {
initId = new Long(blockSize);
}
여튼 말씀하신 것처럼 table id 기반 id gnr를 사용한다면 본인이 만든 SEQ 테이블에 있는 table_name의 next_id 값에 +1한 값이 다음 pkid로 되는건 알고 있습니다. (blocksize가 1일 경우이고 blocksize가 1 이상이면 내부적으로 계산된 뒤 증가하구요...) 그런데 egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl를 살펴보니 아래 소스를 기준으로 "COMTECOPSEQ"라는 SEQ테이블에 "ADBK_ID"라는 table_name이 없다면 Object insertInitId(final boolean useBigDecimals, final int blockSize)를 통해 "ADBK_ID"를 INSERT 해준 뒤, NEXT_ID 값을 0으로 초기값으로 잡아서 넣어주더라고요. 그 뒤에는 1씩 증가하게 되구요.
<bean name="egovAdbkIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
<property name="dataSource" ref="egov.dataSource" />
<property name="strategy" ref="adbkIdStrategy" />
<property name="blockSize" value="10"/>
<property name="table" value="COMTECOPSEQ"/>
<property name="tableName" value="ADBK_ID"/>
</bean>
insertInitId(...) 내부를 살펴보니 아래 소스를 통해 next_id의 초기값이 정해지는 거 같은데 [COMTECOPSEQ테이블에 지정한 ID Key의 값이 "ADBK_ID" 일때 NEXI_ID 컬럼 값이 1이면 getNextStringId() 메소드의 결과로 1을 리턴 받을수 있습니다.] 라는 답변 내용을 연관지을 부분을 찾을 수가 없습니다. 저는 이처럼 처음 초기값을 insert해줄 때 1부터 시작되게 하고 싶습니다. 처음 주셨던 답변으로는 해결이 안 되네요 ㅠㅠ
if (useBigDecimals) {
initId = new BigDecimal(blockSize);
} else {
initId = new Long(blockSize);
}
A
안녕하세요.
표준프레임워크센터 입니다.
Table에서 초기 값을 가져오고
I NSERT된 NEXT_ID가 없으면
기본값을 INSERT 하는 부분은 다음 클래스에 존재합니다.
egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl
다음 메소드가 핵심적인 기능을 담당하는것으로 보여집니다.
private Object allocateIdBlock(final int blockSize, final boolean useBigDecimals)
만약 커스텀을 하신다면 위 부분을 분석하실 필요가 있을 것으로 보입니다.
DB에 NEXT_ID로 1을 지정하는게
훨씬 수월할것으로 보입니다.
감사합니다.
표준프레임워크센터 입니다.
Table에서 초기 값을 가져오고
I NSERT된 NEXT_ID가 없으면
기본값을 INSERT 하는 부분은 다음 클래스에 존재합니다.
egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl
다음 메소드가 핵심적인 기능을 담당하는것으로 보여집니다.
private Object allocateIdBlock(final int blockSize, final boolean useBigDecimals)
만약 커스텀을 하신다면 위 부분을 분석하실 필요가 있을 것으로 보입니다.
DB에 NEXT_ID로 1을 지정하는게
훨씬 수월할것으로 보입니다.
감사합니다.