2017-02-14 3 views
1

Я пишу метод, который вставляет или обновляет запись в таблице mysql, а обновление происходит только тогда, когда поле «sample_time» больше, чем это значение текущей записи в таблице. Вот как я хочу это сделать сейчас.jooq mysql select by <R extends Record> уникальные ключи, независимо от имени поля

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. , как я мог бы реализовать «выбрать уникальные ключи пластинки, не обращая внимания на точное имя поля или поля числа»
  2. или иначе, как я мог бы использовать обусловливающие дубликата обновление с условием в jooq

Заранее благодарим за любую помощь!

+0

Вы, кажется, осуществляет «оптимистическую блокировку» на вершине jOOQ. Знаете ли вы об этой функции? https://www.jooq.org/doc/latest/manual/sql-execution/crud-with-updatablerecords/optimistic-locking –

ответ

0

Вы можете получить ссылку на PrimaryKey мета информацию через Table.getPrimaryKey():

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

    // Now create your condition from these fields 
} 
+0

Спасибо! Он хорошо работает с одним первичным ключом, но, похоже, не работает с составным первичным ключом ... Я обновляю свои коды в вопросе. – user3352035

+0

@ user3352035: Могу ли я предложить вам вернуться к редактированию и задать новый вопрос? Вполне вероятно: 1) ваш новый вопрос не имеет отношения к вашему предыдущему 2) Если вы скопируете мой ответ на свой вопрос, этот вопрос (и мой ответ) станет гораздо менее полезным для всех, кто посетит этот вопрос в будущем , –

+0

Вы правы, я вернул вопрос. Спасибо вам за помощь! :) – user3352035

Смежные вопросы