Jooq - 忽略重复

时间:2012-04-20 14:26:20

标签: java sql database jooq

我目前正在使用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);

但无论我添加它,它似乎仍然会在重复上引发错误。

1 个答案:

答案 0 :(得分:2)

INSERT IGNORE INTO的路线图支持MySQL的jOOQ 2.3.0语法。最近在jOOQ user group讨论了这个问题。此语法将在支持SQL MERGE语句的所有其他SQL方言中进行模拟。

同时,作为一种变通方法,您可以尝试一次插入一条记录

相关问题