On Fri, May 22, 2015 at 9:46 AM, Mike Kienenberger <mkien...@gmail.com> wrote: > Hugi, it would be worthwhile to make this a customizable parameter in > the existing primary key generator rather than only creating your own > custom version. I also haven't looked at that part of the code base > in a long while so I don't know how feasible this is.
I'm talking about whether to store the next value or the last value. It wasn't obvious in my first reply. > On Fri, May 22, 2015 at 7:15 AM, Andrus Adamchik <and...@objectstyle.org> > wrote: >>> Cayenne and EOF use a similar method, i.e. a table for the primary keys, >>> but there's an implementation difference -- EOF stores the *last* primary >>> key value provided while Cayenne stores the *next* value to be used. This >>> means they can't share a single table (by using a view for the naming >>> differences). >>> >>> Anyone have any brilliant ideas or workarounds for this? (before I start >>> messing around with triggers or other messy workarounds). >> >> Cayenne has PkGenerator interface that can be customized/reimplemented: >> >> http://cayenne.apache.org/docs/4.0/api/org/apache/cayenne/dba/PkGenerator.html >> >> Unfortunately it is not directly injectable via DI (this is a TODO), so >> initializing it will require a bit of indirection. E.g. you may subclass of >> decorate DbAdapterFactory. Here is a decoration example: >> >> new ServerRuntimeBuilder() >> .addModule(binder -> binder >> .decorate(DbAdapterFactory.class) >> .after(MyDbAdapterFactory.class)).build(); >> >> >> public class MyDbAdapterFactory implements DbAdapterFactory { >> private DbAdapterFactory delegate; >> >> public MyDbAdapterFactory(@Inject DbAdapterFactory delegate) { >> this.delegate = delegate; >> } >> >> @Override >> public DbAdapter createAdapter(DataNodeDescriptor nodeDescriptor, >> DataSource dataSource) throws Exception { >> DbAdapter a = deletegate.createAdapter(nodeDescriptor, dataSource); >> return .. // here decorate "a" to return a custom PkGenerator. >> } >> } >> >>> On the subject of PK generation, there's one thing I really like in EOF; if >>> the PK table is missing a row for a table, EOF will automatically select >>> the max() value of the table's PK column and use it to populate the table. >>> Quite useful. Any objections to this becoming a feature in Cayenne as well? >>> (via pull request) >> >> I am all +1 on this. I'd say PK generation has been neglected for some time, >> so we should freshen it up, including auto-bootstrap that you mentioned, and >> DI integration, maybe smarter categorization by generator strategy, etc. >> >> One of the reasons I personally haven't payed much attention to this lately, >> is cause I am using DB autoincrement (something not supported by EOF) and >> never had to worry about PK lookup tables, sequences, etc. :) >> >> Andrus >> >>> On May 22, 2015, at 1:33 PM, Hugi Thordarson <h...@karlmenn.is> wrote: >>> >>> Hi again. >>> >>> I'm using EOF and Cayenne to talk to the same MySQL database. Works fine >>> apart from one problem: Primary key generation. >>>