Thanks for the clarification :) I totally agree with you about "The great primary-key debate" and i can and will change this specific table to use a separate sequence based integer primary key instead of a "natural" key.
However, since the general "idea" behind jOOQ seems to be that anything that is "valid" in SQL is valid in jOOQ, i doubt wether this is something that should be imposed by jOOQ? What about legacy databases that cannot be changed? On Jun 23, 3:51 pm, Lukas Eder <[email protected]> wrote: > Hi Sander, > > That's a feature with several integration tests verifying it! :) > > UpdatableRecords always base their actions (store, delete, refresh) on their > main unique key (mostly a primary key). If the key value changes, an update > wouldn't make sense anymore. Refreshing the record will load a new record. > This can be disputed, of course, but jOOQ strongly follows the strategy of > maximal normalisation in a database as described in this article, for > instance: > > http://www.techrepublic.com/article/the-great-primary-key-debate/1045050 > > In that way, changing the primary key value in jOOQ is actually a simple > "trick" for duplicating the record. I'll add a ticket to better document > this in the UpdatableRecord Javadoc: > > https://sourceforge.net/apps/trac/jooq/ticket/660 > > Cheers > > Lukas > > Am 23.06.2011 15:03 schrieb "Sander Plas" <[email protected]>: > > > > > > > > > In jOOQ 1.6.1, changing the value of a primary key field on an > > existing record results in a new insert. > > > Record from my 'ledger' table, primary key is on column 'code': > > > code | description > > ------+--------------------------------------- > > M1 | test description > > > This works OK: > > > record.setDescription("blabla"); > > record.store(); > > > PostgreSQL log: > > > update "public"."ledger" set "description" = $1 where > > "public"."ledger"."code" = $2 > > parameters: $1 = 'blabla', $2 = 'M1' > > > This doesn't: > > > record.setCode("test"); > > record.store(); > > > PostgreSQL log: > > > insert into "public"."ledger" ("code", "description") values ($1, $2) > > parameters: $1 = 'test', $2 = 'blabla' > > > Is this a bug or a feature? :)
