在JOOQ中的ON DUPLICATE KEY中返回id

时间:2014-10-19 06:25:55

标签: java mysql jooq on-duplicate-key

我真正想要的是在JOOQ中编写以下查询:

stmt = connection.prepareStatement(
    "INSERT INTO `tbl` (`name`, `service_id`, `device_id`) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE `id` = LAST_INSERT_ID(`id`)", 
    Statement.RETURN_GENERATED_KEYS
);

我无法在JOOQ中找到一种方法。有可能吗?

2 个答案:

答案 0 :(得分:5)

目前(截至jOOQ 3.4-3.6),由于jOOQ INSERT API的缺陷,这是不可能的:

答案 1 :(得分:0)

这可能会对你有所帮助。暂时我正在使用它:

Field<Integer> LAST_INSERT_ID = DSL.function("LAST_INSERT_ID", Integer.class, PACKAGE.ID);

dsl.insertInto(PACKAGE)
   .set(dsl.newRecord(PACKAGE, packagePojo))
   .onDuplicateKeyUpdate()
   .set(PACKAGE.ID, LAST_INSERT_ID)
   .set(PACKAGE.PTR_JOB, packagePojo.getPtrJob())
   .set(PACKAGE.PACK_NUMBER, packagePojo.getPackNumber())
   .set(PACKAGE.RACK, packagePojo.getRack()