2

現在、プロジェクトに Jooq を使用していますが、挿入時に重複キーを無視する方法が必要です。

テーブルに書き込みたいオブジェクトの配列がありますが、それらが既に存在する場合は、START_TS と EVENT_TYPE の複合一意インデックスによって決定され、挿入がサイレントに失敗するようにします。

私のコードは次のようになります。

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();

このようなソリューションが理想的です: https://stackoverflow.com/a/4920619/416338

次のようなものを追加する必要があると思います:

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

しかし、何を追加しても、重複でエラーが発生するようです。

4

1 に答える 1

2

MySQL のINSERT IGNORE INTO構文のサポートは、jOOQ 2.3.0のロードマップにあります。これは、最近jOOQ ユーザー グループで議論されました。この構文は、SQLMERGEステートメントをサポートする他のすべての SQL 方言でシミュレートされます。

当面の間、回避策として、一度に 1 つのレコードを挿入してみてください。

于 2012-04-20T22:25:45.513 に答える