2012-04-20 126 views
2

我目前正在使用Jooq作为项目,但我需要一种方法来忽略插入时的重复键。Jooq - 忽略重复

我有一个想要写入表的对象数组,但是如果它们已经存在由START_TS和EVENT_TYPE上的复合唯一索引确定,我希望插入以静默方式失败。

我的代码看起来是这样的:

​​

像这样的解决方案是理想的:https://stackoverflow.com/a/4920619/416338

我想我需要添加类似:

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

但无论我添加它似乎仍然在重复上抛出一个错误。

+2

我不知道这个工具,但在普通的SQL,你可以这样做'INSERT INTO表(SELECT COL1 ,col2 FROM(VALUES(val1,val2))as temp(col1,col2)WHERE NOT EXISTS(SELECT'1'FROM table where col1 = val1))'这对于几乎每个RDBMS都有效变异)。 – 2012-04-20 15:47:47

+0

@LukasEder INSERT INTO t(column1,... columnN)SELECT ...从其他表中...几乎所有(如果不是全部)DBMS都支持''。 – 2012-04-20 22:29:14

+0

@ypercube:我一定错过了'SELECT' ...我的坏 – 2012-04-20 22:31:35

回答

2

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

与此同时,作为一种解决方法,你可以尝试一次插入一条记录