2012-04-20 3 views
2

현재 프로젝트에 Jooq를 사용하고 있지만 삽입시 중복 키를 무시할 방법이 필요합니다.Jooq - Duplicates 무시

테이블에 쓸 개체 배열이 있지만 이미 존재하는 경우 START_TS 및 EVENT_TYPE의 합성 고유 인덱스에 의해 결정됩니다. 삽입이 자동으로 실패하기를 원합니다.

.onDuplicateKeyUpdate().set(MY_REC.EVENT_TYPE,MY_REC.EVENT_TYPE); 

그러나 어떤 I : 나는 같은 것을 추가 할 필요가 파악 https://stackoverflow.com/a/4920619/416338

이 같은 솔루션이 이상적 일 것이다

InsertValuesStep<MyRecord> query = fac.insertInto(MY_REC, 
       MY_REC.START_TS, 
       MY_REC.STOP_TS, 
       MY_REC.EVENT_DATA, 
       MY_REC.EVENT_TYPE, 
       MY_REC.PUBLISHED_TS, 
       MY_REC.MY_ID 
       ); 

     for(int i=0;i<recs.length;i++) 
     { 
      MyClass evt = recs[i]; 
      query.values(
        new java.sql.Date(evt.startTS.getTime()), 
        (evt.stopTS == null) ? null : new java.sql.Date(evt.stopTS.getTime()), 
        evt.eventData, 
        evt.type.name(), 
        date, 
        id) 

     } 

     query.execute(); 

:

내 코드는 다음과 같이 보입니다 여전히 중복에 오류가 발생하는 것 같습니다.

+2

나는이 도구를 모르는 시도 할 수 있지만, 일반 SQL에서 당신은 COL1을 선택합니다 (테이블에 삽입'과 같은 작업을 수행 할 수 있습니다 , col2 FROM (VALUES (val1, val2)) temp (col1, col2)로 존재하지 않는 곳 (거의 모든 RDBMS (또는 약간) 변화). –

+0

@LukasEder'INSERT INTO t (column1, ... columnN) SELECT ... 다른 테이블에서 ... '는 거의 모든 DBMS에서 지원됩니다. –

+0

@ypercube : 나는 '선택'을 놓쳤을 것임에 틀림 없다 ... 나의 나쁜 –

답변

2

MySQL의 INSERT IGNORE INTO 구문 지원은 jOOQ 2.3.0의 로드맵에 나와 있습니다. 이것은 최근에 jOOQ user group에서 논의되었습니다. 이 구문은 SQL MERGE 문을 지원하는 다른 모든 SQL 언어에서 시뮬레이트됩니다.

그 동안

, 해결 방법으로, 당신은 한 번에 하나 개의 레코드를 삽입하는