2014-07-18 3 views
2

현재 jOOQ를 평가 중입니다. 그리고 다음과 같이 join 문을 생성하는 데 문제가 있습니다.jOOQ 코드 생성 : forcedType

create.select() 
     .from(TABLEA, TABLEB) 
     .where(TABLEA.ID.equal(TABLEB.TABLEA_ID)); 

유형 불일치 때문에. (오라클 11g) 데이터베이스 TABLEA는 NUMBER(22,0)이지만 TABLEB.TABLEA_ID는 NUMBER(7,0)입니다.

그러므로 jOOQ는 첫 번째 속성에 대해 BigInteger 필드를 생성하지만 후자의 경우 Integer 필드를 생성합니다.

그래서 나는 다음과 같은 XML을 BigInteger 모든 NUMBER(.*,0)을 생성하려고 :

<forcedTypes> 
     <forcedType> 
      <name>DECIMAL_INTEGER</name> 
      <expression>.*</expression> 
      <types>NUMBER(.*,0)</types> 
     </forcedType> 
    </forcedTypes> 

</database> 

하지만이 작동하지 않았다. 형식으로 Integer 인 입력란이 있습니다. 그렇다면 테이블 열 유형을 변경하는 것 외에 어떤 작업을 할 수 있습니까?

답변

1

불행히도 #2485은 아직 jOOQ 3.4에 구현되어 있지 않으므로 길이, 정밀도, 크기를 아직 일치시킬 수 없습니다. 설명서에 다른 것, 틀린 것을 나타내는 것 같습니다 ...

가끔 발생하는 경우에만 jOOQ API를 통해 데이터 유형을 조작 할 수 있습니다. 다음은 몇 가지 옵션입니다.

// This will render an actual cast in the generated SQL statement 
TABLEA.ID.equal(TABLEB.TABLEA_ID.cast(TABLEA.ID.getDataType())) 
TABLEA.ID.equal(TABLEB.TABLEA_ID.cast(BigInteger.class)) 

// This generate a new column TABLEA_ID of type NUMBER(22, 0) 
TABLEA.ID.equal(TABLEB.TABLEA_ID.coerce(TABLEA.ID.getDataType())) 
TABLEA.ID.equal(TABLEB.TABLEA_ID.coerce(BigInteger.class)) 

// This is your last resort: raw types 
TABLEA.ID.equal((Field) TABLEB.TABLEA_ID) 
+0

불행히도 정규식이 작동하지 않았습니다. 'NUMBER'에서 작동했지만, 규모가있는 NUMBER 유형에는'BigInteger'를 사용합니다. –

+0

@ Angelo.Hannes : 나쁘다. 혼란에 빠져서 죄송합니다. [# 2485] (https://github.com/jOOQ/jOOQ/issues/2486)는 아직 jOOQ 3.4에 구현되지 않았기 때문에 작동하지 않습니다. 설명서가 잘못되었습니다 ... 위의 명시 적 변환 중 하나를 선택하거나 데이터베이스의 모든 관련 열과 일치하는 정규식을 작성해야합니다. '_ID'로 끝나는 모든 컬럼? –

+0

대단히 감사합니다. 해결 방법 중 하나를 시도 할 것입니다. –