"I'm actually curious to know the rationale behind that one, myself."
In the beginning ... OK, I'm speculating here because I wasn't around in the beginning ... I believe Cayenne ONLY supported the AUTO_PK_SUPPORT, although maybe Oracle sequences were there early on. Over time, DB-generated key support was added (sometime in 2.x, I think) and also PostgreSQL sequences. It is also the only method that is going to work on all DBs. mrg On Tue, Apr 20, 2010 at 5:01 PM, Robert Zeigler <[email protected]> wrote: > I can understand Joe's confusion: not only does cayenne generate the > AUTO_PK_SUPPORT table, but it also inserts a row for each table, regardless > of whether that table is using cayenne vs. db-generated ids. > I'm actually curious to know the rationale behind that one, myself. :) I > mean, I know cayenne will fall back to using cayenne-generated ids if the db > connected to (or corresponding driver) doesn't support auto-pk generation. > But you should be able to detect that at schema generation time, and you > have the mapping in hand to determine which entities will use db-generated > pks... so... at the very least, shouldn't you only insert a row for those > entities which need it? > > The flip side, though, is that having an unused row in the db will have > virtually no performance impact, and it keeps the generation code much > simpler. *shrug* Just thinking out loud, I guess... I'd love to hear the > original rationale for including all entities in the table, regardless of > what their pk-generation strategy is. :) > > Robert > > On Apr 20, 2010, at 4/203:43 PM , Michael Gentry wrote: > >> Hi Joe, >> >> On Tue, Apr 20, 2010 at 1:12 PM, Joe Baldwin <[email protected]> >> wrote: >>> >>> Michael, >>> >>>> However, I would suggest not doing both strategies on the same table as >>>> it will probably bite you in the long run somehow. >>> >>> That is not my intention (but I agree with you). I am verifying all of >>> my entities right now. However, the Cayenne Modeler configuration was not >>> clear. You said that if I set the "PK Generation Strategy" to "Database >>> Generated" but then I unintentionally had the "Create Primary Key Support" >>> checked in the "Generate DB Schema" Options dialog, then it would create the >>> AUTO_PK_SUPPORT table. >>> >>> It is not clear to me why you have this in two separate config >>> parameters. Base on your explanation (in the previous email), that if you >>> select the "PK Generation Strategy" type for the individual entities, then >>> the "Create Primary Key Support" option should be automatically configured >>> at that time. >>> >>> Said a different way: why would the Cayenne Modeler create >>> Cayenne-Managed Primary Key Support for tables with the "PK Generation >>> Strategy" to "Database Generated"? >> >> >> I think you are confusing Cayenne Modeler's schema generation feature >> with Cayenne's runtime primary key support feature. More below. >> >> >>> I may be wrong, but base on what you had described, it seems like Cayenne >>> Modeler is creating a conflicting configuration in this scenario. >> >> >> There is no conflict. Perhaps if you don't use "Database Generated" >> on any DbEntities then it would be safe in Cayenne Modeler to not have >> the checkbox when generating the SQL to create the AUTO_PK_SUPPORT >> table, but I'm not even sure I agree with that idea. Keep in mind >> that each table can have different PK generation options (even though >> it would potentially be confusing). Cayenne doesn't stop you from >> using the AUTO_PK_SUPPORT on some entities even when you are using >> MySQL's auto-generated PK on other entities (for example, you may need >> higher performance on some tables for bulk inserts). Cayenne will use >> whichever strategy you specify for the entity, but allows you to >> create the AUTO_PK_SUPPORT if it is needed (your call) when you >> generate the SQL. >> >> >>>> If you have Cayenne generating the keys, it'll push them to MySQL. >>> >>> I agree, but I have clearly set "PK Generation Strategy" to "Database >>> Generated". So my question remains: given that the CM allows conflicting >>> parameters, which one takes precedence here? I have set "PK Generation >>> Strategy" to "Database Generated", are you saying that Cayenne then ignores >>> this configuration? >>> >>> >>>> However, I would suggest not doing both strategies on the same table as >>>> it will probably bite you in the long run somehow. >>> >>> >>> I agree. That is *definitely* not my intention, (But as I described >>> above, it appears that this is very easy to do with CayenneModeler.) >>> >>> Michael, what you have described concerning CM is not intuitive. I could >>> easily see a designer configuring one table with Cayenne-Managed >>> auto-generation, and another with database-auto-generation (because Cayenne >>> Modeler allows it). If what you are saying is true, then selecting the >>> "Create Primary Key Support" checkbox, will override they >>> "database-auto-generation" parameter. >> >> >> That's actually not at all what I am saying. Selecting the "Create >> Primary Key Support" checkbox in Cayenne Modeler's schema generation >> tool just creates it in the schema. It doesn't override what you set >> for each individual entity. Whomever is doing the design needs to >> decide how the PKs are generated on each table. In a lot of >> applications it is the same method for all entities, but it doesn't >> have to be that way. >> >> >>> If this is as bad as you suggest, then Cayenne Modeler should either >>> prevent this from happening or display an explicit warning. >> >> >> I don't think it is bad at all and never suggested it was. It is a >> very important and useful feature. >> >> mrg > >
