Thanks for your response. As I mentioned I've compared the use case with 
Hibernate. Both libraries (i. e. Hibernate and jOOQ) use the same JDBC 
driver and execute INSERT INTO table (field1, field2, ...) VALUES (value1, 
value2, ...).
However Hibernate does not execute an additional SELECT statement to get 
the generated key value.

I tried your suggested solution (sligtly modified) to insert the row and as 
far as I can see, I get the generated key value without an additional 
SELECT statement.

DSLContext database = applicationContext().getBean(DSLContext.class);
ClientRecord record = new ClientRecord();
// insert
record.setName(randomUUID().toString());
Record inserted = 
database.insertInto(record.getTable()).set(record).returning(record.key().fields()).fetchOne();
record.setId((Integer) inserted.getValue(0)).changed(false);
System.out.println(record.getId());
// update
record.setName(randomUUID().toString());
record.attach(database.configuration());
record.store();


However it would be preferable if jOOQ would not require me to set the id 
in the inserted record manually and mark the field as unchanged to make the 
update working.

Regards,
Marcus


Am Donnerstag, 30. August 2018 20:25:31 UTC+2 schrieb Samir Faci:
>
> I think that's a limitation of the query you're running.  If you want to 
> do all this in one operation you may want to look at using upserts.
>
> https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html
>
> I'm not sure if your version of MySQL supports this but otherwise you are 
> forced to do a select otherwise.
>
> I'm not 100% sure on the MySQL syntax jooq pattern to use, but something 
> like this should work.
>
> Record result = 
>             dslContext.insertInto(record.getTable())
>                 .set(record)
>                 .onDuplicateKeyUpdate()
>                 .set(record)
>                 .returning(record.field1())
>                 .fetchOne();
> long id = result.getId();
>
>
> On Thu, Aug 30, 2018 at 5:12 AM Marcus Gattinger <[email protected] 
> <javascript:>> wrote:
>
>> BTW: Im using Record.store() to insert new rows to the table.
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "jOOQ User Group" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
> -- 
> Thank you
> Samir Faci
> https://keybase.io/csgeek
>

-- 
You received this message because you are subscribed to the Google Groups "jOOQ 
User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to