jooq mysql选择<r extends =“”record =“”>唯一键,不考虑字段名称

时间:2017-02-14 02:39:41

标签: java mysql jooq

我正在编写一个将记录插入或更新到mysql表中的方法,并且仅在字段&#34; sample_time&#34;大于表中当前记录的此值。以下是我现在想要做的事情。

 public <R extends Record> void upsertRecord(Table<R> table, R record) {
    Connection conn = getConnection();
    DSL.using(getConfiguration()).transaction(configuration -> {
        try (DSLContext dslContext = DSL.using(configuration)) {

            R old = // select with unique keys of table


            // something like if (old.get("update_time) < record.get("update_time"))
                dslContext.insertInto(table).set(record).onDuplicateKeyUpdate().set(record).execute();
                conn.commit();
           // }   
        } catch (SQLException e) {
            // TODO
        } finally {
            closeConnection(conn);
        }
    });
}

但我不知道如何通过记录的唯一键来选择,而不考虑确切的字段名称或字段编号。所以我的问题是:

  1. 我如何实施&#39;选择记录的唯一键,而不考虑确切的字段名称或字段编号&#39;
  2. 或者我怎样才能在jooq
  3. 中使用带条件的重复更新条件

    提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以通过Table.getPrimaryKey()获取对PrimaryKey元信息的引用:

UniqueKey<R> key = table.getPrimaryKey();
if (key != null) {
    List<TableField<R, ?>> fields = key.getFields();

    // Now create your condition from these fields
}