Table Id Generation Service를 커스텀하고 싶습니다.(2)
- 작성자 :
- 질*
- 작성일 :
- 2019-03-05 11:08:03
- 조회수 :
- 2,907
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
안녕하세요. 2월 28일에 Table Id Gen 서비스에 대해 질문 했었는데 답변이 잘 이해가 되지 않아 재질문 드립니다.
-----------
하지만 그것보다는
초기 1로 시작한다면
egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl 를 사용하시고
다음과 같은 설정을 하시면 됩니다.
다음은 공통컴포넌트를 보면 예시가 나와있습니다.
* ID Generation 설정 빈 파일 경로 (참고용)
/src/main/resources/egovframework/spring/com/idgn/context-idgn-Adbk.xml
<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>
COMTECOPSEQ테이블에 지정한
ID Key의 값이 "ADBK_ID" 일때 NEXI_ID 컬럼 값이 1이면
getNextStringId() 메소드의 결과로 1을 리턴 받을수 있습니다.
-----------
getNextIntegerId()를 통해 pkid를 생성해보니 시작값이 0부터 시작되고 있어서 1로 시작할 수 없냐고 질문을 했었는데 1월에 했던 질문에서는 id gen과 관련된 서비스를 커스텀하여 사용하라고 했었습니다.
이번에 받은 답변은 위와 같았고 getNextStringId()를 사용하면 1을 리턴 받을 수 있다고 하였는데 실제로 사용해보니 IntegerId()와 동일하게 0부터 리턴을 하고 있습니다.
아래 코드가 context-idgen.xml에 설정해둔 코드입니다.
<bean name="SEQ_NO" class="egovframework.rte.fdl.idgnr.impl.EgovSequenceIdGnrService" destroy-method="destroy">
<property name="dataSource" ref="dataSource" />
<property name="query" value="SELECT SEQ_NO.NEXTVAL FROM DUAL" />
</bean>
<bean name="seqBoard"
class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl"
destroy-method="destroy">
<property name="dataSource" ref="dataSource" />
<property name="strategy" ref="prefixSeqBoard" />
<property name="blockSize" value="10"/>
<property name="table" value="TABLE_SEQ"/>
<property name="tableName" value="TABLE_BOARD"/>
</bean>
<bean name="prefixSeqBoard"
class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
<property name="prefix" value="" />
<property name="cipers" value="20" />
<property name="fillChar" value="0" />
</bean>
그리고 컨트롤러에서 아래와 같이 @Resource를 설정한 후 getNextIntegerId()를 호출하여 사용 중입니다.
@Resource(name = "seqBoard")
private EgovIdGnrService seqBoardSvc;
.
.
.
boardVO.setPkid(seqBoardSvc.getNextIntegerId());
이렇게 해서 사용해보면 setPkid에 초기값이 0이 담기게 됩니다. 저는 이 초기값이 1로 시작하게 하고 싶습니다.
"COMTECOPSEQ테이블에 지정한 ID Key의 값이 "ADBK_ID" 일때 NEXI_ID 컬럼 값이 1이면 getNextStringId() 메소드의 결과로 1을 리턴 받을수 있습니다." 이부분이 정확하게 어떤 의미인지 잘 이해가 되지 않으니 위 내용을 바탕으로 다시 한번 답변 부탁드리겠습니다.
-----------
하지만 그것보다는
초기 1로 시작한다면
egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl 를 사용하시고
다음과 같은 설정을 하시면 됩니다.
다음은 공통컴포넌트를 보면 예시가 나와있습니다.
* ID Generation 설정 빈 파일 경로 (참고용)
/src/main/resources/egovframework/spring/com/idgn/context-idgn-Adbk.xml
<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>
COMTECOPSEQ테이블에 지정한
ID Key의 값이 "ADBK_ID" 일때 NEXI_ID 컬럼 값이 1이면
getNextStringId() 메소드의 결과로 1을 리턴 받을수 있습니다.
-----------
getNextIntegerId()를 통해 pkid를 생성해보니 시작값이 0부터 시작되고 있어서 1로 시작할 수 없냐고 질문을 했었는데 1월에 했던 질문에서는 id gen과 관련된 서비스를 커스텀하여 사용하라고 했었습니다.
이번에 받은 답변은 위와 같았고 getNextStringId()를 사용하면 1을 리턴 받을 수 있다고 하였는데 실제로 사용해보니 IntegerId()와 동일하게 0부터 리턴을 하고 있습니다.
아래 코드가 context-idgen.xml에 설정해둔 코드입니다.
<bean name="SEQ_NO" class="egovframework.rte.fdl.idgnr.impl.EgovSequenceIdGnrService" destroy-method="destroy">
<property name="dataSource" ref="dataSource" />
<property name="query" value="SELECT SEQ_NO.NEXTVAL FROM DUAL" />
</bean>
<bean name="seqBoard"
class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl"
destroy-method="destroy">
<property name="dataSource" ref="dataSource" />
<property name="strategy" ref="prefixSeqBoard" />
<property name="blockSize" value="10"/>
<property name="table" value="TABLE_SEQ"/>
<property name="tableName" value="TABLE_BOARD"/>
</bean>
<bean name="prefixSeqBoard"
class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
<property name="prefix" value="" />
<property name="cipers" value="20" />
<property name="fillChar" value="0" />
</bean>
그리고 컨트롤러에서 아래와 같이 @Resource를 설정한 후 getNextIntegerId()를 호출하여 사용 중입니다.
@Resource(name = "seqBoard")
private EgovIdGnrService seqBoardSvc;
.
.
.
boardVO.setPkid(seqBoardSvc.getNextIntegerId());
이렇게 해서 사용해보면 setPkid에 초기값이 0이 담기게 됩니다. 저는 이 초기값이 1로 시작하게 하고 싶습니다.
"COMTECOPSEQ테이블에 지정한 ID Key의 값이 "ADBK_ID" 일때 NEXI_ID 컬럼 값이 1이면 getNextStringId() 메소드의 결과로 1을 리턴 받을수 있습니다." 이부분이 정확하게 어떤 의미인지 잘 이해가 되지 않으니 위 내용을 바탕으로 다시 한번 답변 부탁드리겠습니다.
A
안녕하세요.
표준프레임워크센터 입니다.
설정하신 id geration 빈 샘플을 참고해보면
EgovSequenceIdGnrServiced으로 DB 시퀀스 기반 ID 생성을 하실려고는 듯 합니다.
ID 생성에는 몇가지 방법이 있는데
그 종류는 다음 wiki 페이지를 참고하실수 있습니다.
http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:fdl:id_generation
시퀀스 기반에서 중요한것은 시퀀스의 초기값입니다.
이 초기값을 다음과 같이 1로 시작하면 원하시는대로 1부터 시작하는 ID generation이 가능할듯 합니다.
CREATE SEQUENCE SEQ_NO MINVALUE 1; => 1부터 생성
빈설정은 다음과 같이 하시면 됩니다.
<bean name="testIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovSequenceIdGnrService" destroy-method="destroy">
<property name="dataSource" ref="egov.dataSource" />
<property name="strategy" ref="prefixSeqBoard" /> => 필요에 따라 추가 (옵션이며 숫자형으로 받는 경우 불필요)
<property name="query" value="S ELECT SEQ_NO.NEXTVAL FROM DUAL" />
</bean>
<bean name="prefixSeqBoard" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
<property name="prefix" value="TEST" />
<property name="cipers" value="20" />
<property name="fillChar" value="0" />
</bean>
* 참고로
seqBoard 빈은 테이블 기반 ID를 관리하는것으로
직전에 알려 드린 방법으로 설정하시면 됩니다.
감사합니다.
표준프레임워크센터 입니다.
설정하신 id geration 빈 샘플을 참고해보면
EgovSequenceIdGnrServiced으로 DB 시퀀스 기반 ID 생성을 하실려고는 듯 합니다.
ID 생성에는 몇가지 방법이 있는데
그 종류는 다음 wiki 페이지를 참고하실수 있습니다.
http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:fdl:id_generation
시퀀스 기반에서 중요한것은 시퀀스의 초기값입니다.
이 초기값을 다음과 같이 1로 시작하면 원하시는대로 1부터 시작하는 ID generation이 가능할듯 합니다.
CREATE SEQUENCE SEQ_NO MINVALUE 1; => 1부터 생성
빈설정은 다음과 같이 하시면 됩니다.
<bean name="testIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovSequenceIdGnrService" destroy-method="destroy">
<property name="dataSource" ref="egov.dataSource" />
<property name="strategy" ref="prefixSeqBoard" /> => 필요에 따라 추가 (옵션이며 숫자형으로 받는 경우 불필요)
<property name="query" value="S ELECT SEQ_NO.NEXTVAL FROM DUAL" />
</bean>
<bean name="prefixSeqBoard" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
<property name="prefix" value="TEST" />
<property name="cipers" value="20" />
<property name="fillChar" value="0" />
</bean>
* 참고로
seqBoard 빈은 테이블 기반 ID를 관리하는것으로
직전에 알려 드린 방법으로 설정하시면 됩니다.
감사합니다.