TableIdGenerationService와 관련해서 문의드립니다.
안녕하세요 수고가 많으십니다:)
현재 Anyframe 3.2.0 template을 이용해서 프로젝트를 수행하고 있는데요.
TableIdGeneration과 관련해서 문의사항이 있어서 글을 올려봅니다.
다름이 아니라, Anyframe Core Manual과 anyframe-idgenerationtest-src.zip 예제를 이용해서 정상적으로 적용을 했습니다.
문의사항은 예를 들어 다음과 같은 context-*.xml설정 에서
------------------------------------------------------------------------------------------------------------
bean name="Ids-TestWithGenerationStrategy"
class="anyframe.core.idgen.impl.TableIdGenerationService"
destroy-method="destroy">
property name="dataSource" ref="util_datasource"/>
property name="strategy" ref="mixPrefix"/>
config:configuration block-size="1" table="idstest" key-table="test"/>
/bean>
bean name="mixPrefix" class="anyframe.core.idgen.impl.strategy.MixPrefix">
property name="prefix" value="TEST-"/>
property name="cipers" value="5"/>
property name="fillChar" value="*"/>
/bean>
------------------------------------------------------------------------------------------------------------
최초에 생성된 ID를 TEST-****0 라고 할 경우에, IDS테이블의 NEXT_ID가 1씩 증가하므로
계속 id가 생성이 되면 cipers가 5자리가 넘어가는 경우가 생깁니다.
즉 TEST-99999로 아이디를 SELECT 하고 IDS테이블의 NEXT_ID='100000'이 될 경우에
그 다음부터는 정상적으로 ID를 가져오지 못하고 TEST-NULL 이런식으로 ID를 가져옵니다.
처음에는 100000일 경우 뒤에서 5자리를 잘라서 00000으로 시작될거라고 생각을 했었는데,테스트를 해보니
그렇지가 않은 것 같습니다.
ORALCE SEQUENCE의 CYCLE 옵션과 동일하게, cipers가 설정한 값을 초과하는 경우에
이를 0으로 reset 시키는 방법은 없는지요?
아니면 TableIdGenerationService과 별도로 select 하는 값을 가져와서 99999를 초과하는 경우에는
0으로 reset 시키도록 소스상에서 별도로 처리를 해야되는건지 알고 싶습니다.
이렇게 된다면 transaction처리가 걸릴거 같은데......
답변 기다리겠습니다:) 감사합니다.


TableIdGenerationService
먼저 기능 개선과 관련하여 좋은 의견 주셔서 감사합니다.
sangwon.moon말씀대로 cipers을 4로 했을 경우 9999 다음 값으로는 null이 리턴 됩니다.
Anyframe에서 TableIdGenerationService을 개발 했을 당시
9999 다음에 어떤 값을 리턴 해야 하는 것에 대한 논의가 있었습니다.
만약 9999다음에 0000부터 0001,0002... 처럼 다시 시작하게 된다면 PK로 설정된 컬럼에 중복된 ID가 생성 된다는 문제점이 있어서
NULL로 처리하기로 결정했습니다.
Anyframe 차후 버전 (4.5.0)부터는 TableIdGenerationService사용 시 싸이클에 대한 옵션을 두도록해
사용자들이 선택 할 수 있도록 개선 하겠습니다.
답변감사합니다.
TableIdGenerationService과 관련한 답변 감사합니다.
Anyframe 차후 버전 (4.5.0)부터는 TableIdGenerationService사용 시 싸이클에 대한 옵션을 두도록해
사용자들이 선택 할 수 있도록 개선 하겠습니다.
위 답변과 관련하여 가능하시다면, Anyframe 차후버전(4.5.0) release시에 하위버전에서도 위에 대한 적용이 가능하도록
변경부분만 별도로 comment를 해주시면 적용이 쉬울거 같아서 요청드립니다. 감사합니다:)