Hi Johann, 100% hit. I owe you a beer :-)
Maik Am 07.02.2014 um 11:44 schrieb Johann Werner <[email protected]>: > 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 <[email protected]>: > >> 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 ([email protected]) >> Help/Unsubscribe/Update your Subscription: >> https://lists.apple.com/mailman/options/webobjects-dev/jw%40oyosys.com >> >> This email sent to [email protected] >
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 ([email protected]) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to [email protected]
