Hi Maik, as this table seems to be a join-table chances are high that on the relationships to that table in your EOModel you still have „Propagate primary key“ active if Entity Modeler did create that table.
jw Am 07.02.2014 um 11:37 schrieb Musall Maik <m...@selbstdenker.ag>: > Hi, > > I have a weird case where EOF fails to include the primary key with an > INSERT, but not every time. The model of the EO in question looks like this: > > <PastedGraphic-1.png> > > The linkKey column is actually new. I discovered that the primary key before > was (journeyElementRef,workflow) which lead to other problems I needed to > solve, and the database (PostgresQL) didn’t even know any primary key > (although there was a unique index). So I fixed that by introducing a new > independent primary key (changing the lock columns along with it), using the > following migration code (TableName substituted for readability): > > ERXMigrationTable table = database.existingTableNamed( > TableName.ENTITY_NAME ); > ERXMigrationColumn pcol = table.newIntegerColumn( "linkKey", > ALLOWS_NULL ); > String[] sqls = new String[] { > "CREATE SEQUENCE jewfelink_seq", > "UPDATE TableName SET linkKey = nextval('jewfelink_seq')", > "DROP SEQUENCE jewfelink_seq", > }; > for( String sql : sqls ) { > NSLog.out.appendln( "Executing SQL: " + sql ); > ERXJDBCUtilities.executeUpdate( database.adaptorChannel(), sql, > true ); > } > pcol.setAllowsNull( NOT_NULL ); > table.setPrimaryKey( pcol ); > > The generated migration code was: > > alter table TableName alter column linkKey set not null > ALTER TABLE TableName ADD CONSTRAINT TableName_pk PRIMARY KEY (linkKey) > CREATE SEQUENCE TableName_seq > CREATE TEMP TABLE EOF_TMP_TABLE AS SELECT SETVAL('TableName_seq', > (SELECT MAX(linkKey) FROM TableName)) > DROP TABLE EOF_TMP_TABLE > ALTER TABLE TableName ALTER COLUMN linkKey SET DEFAULT nextval( > 'TableName_seq' ) > > Looks correct to me. When I manually construct a new TableName EO in a test > routine, the following SQL is generated: > > SELECT NEXTVAL('PDCJourneyElementWorkflowElementLink_seq') AS KEY0" > withBindings: > INSERT INTO TableName(workflowElementRef, updateDate, linkKey, > workflow, journeyElementRef) VALUES (?::int4, > NULL, ?::int4, ?::varchar(24), ?::int4)" withBindings: > 1:2(workflowElementRef), 2:173(linkKey), > 3:JE_BOOKING(workflow), 4:697860(journeyElementRef) > > so there’s the sequence SELECT to get a new primary key value, followed by > the actual INSERT. But in real usage in the application, this is all that > happens instead: > > INSERT INTO TableName(workflowElementRef, updateDate, workflow, > journeyElementRef) VALUES (?::int4, ?::timestamp, > ?::varchar(24), ?::int4)" withBindings: 1:7(workflowElementRef), > 2:2014-02-07 10:39:51(updateDate), 3:JE_BOOKING(workflow), > 4:697860(journeyElementRef) > > which of course results in > > DEBUG NSLog - Commit failed on data source of type class > com.webobjects.eoaccess.EODatabaseContext > java.lang.IllegalArgumentException: Attempt to insert null object into > an com.webobjects.foundation.NSMutableDictionary. > at > com.webobjects.foundation.NSMutableDictionary.setObjectForKey(NSMutableDictionary.java:78) > at > com.webobjects.eoaccess.EODatabaseContext.commitChanges(EODatabaseContext.java:6348) > at > com.webobjects.eocontrol.EOObjectStoreCoordinator.saveChangesInEditingContext(EOObjectStoreCoordinator.java:386) > at > com.webobjects.eocontrol.EOEditingContext.saveChanges(EOEditingContext.java:3192) > at er.extensions.eof.ERXEC._saveChanges(ERXEC.java:1179) > at er.extensions.eof.ERXEC.saveChanges(ERXEC.java:1102) > > because the primary key is missing, there wasn’t even the sequence SELECT > before the INSERT. > > How can this happen? I suspect it has something to do with the primary key > having been another column in the past that didn’t have a sequence associated > with it. But from the model, it looks correct to me. Is there some > information stored ore cached somewhere else about this? > > Maik > > _______________________________________________ > Do not post admin requests to the list. They will be ignored. > Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) > Help/Unsubscribe/Update your Subscription: > https://lists.apple.com/mailman/options/webobjects-dev/jw%40oyosys.com > > This email sent to j...@oyosys.com
signature.asc
Description: Message signed with OpenPGP using GPGMail
_______________________________________________ Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com