Re: EO mixing up flattened relationships?
Anders Peterson <[email protected]> Tue, 20 Jul 2004 10:16:18 +0200
| Newsgroups | gmane.comp.web.webobjects.devel,gmane.comp.web.webobjects.eof |
|---|---|
| Message-ID | <[email protected]> |
On 2004-07-19, at 21.44, Chuck Hill wrote: Hi Chuck and thanks for trying to help, > Perhaps you are misinterpreting this error. > What it usually means, in my experience, is that some other process > has deleted the target object (row) after this process has read the > foreign key for it. That would explain why you can't find the row. I am certain that no EOs have been created or deleted between app startup and exception. Reproducing this situation is straight forward. At first I thought that I had defined some eo-relationship or a database view incorrectly. Perhaps I have, but I spent many hours looking for such an error and found nothing. Then I remembered I had a similar problem before. (Apple Bug Reporter Problem ID: 2872983) In that case I had vertical inheritance mapping with a to-one relationship defined in an abstract parent class, I could confirm that all necessary attributes where not fetched from the database. Later on, when one of the not-fetched attributes was needed EOF simply took one of the other ones. (I assume I also had some flattened relationship.) At that time I got rid of the problem by switching to horizontal inheritance mapping. Too late for testing Apple informed me that "In particular, any foreign key that is used in the relationship used for flattening inherited attributes and relationship must be used for locking." This time I'm using single table inheritance mapping, and I've made certain I lock on all attributes used to flatten any relationship... One more thing: This only seems to be a problem when fetching data using a WODisplayGroup. /Anders > On Jul 19, 2004, at 11:16 AM, Anders Peterson wrote: > >> Hi, >> >> "The object with globalID _EOIntegralKeyGlobalID[QInstrument >> (java.lang.Integer)307183] could not be found in the database." >> >> There is only one primary key in the database (any table) that equals >> 307183, and it is not in a table associated with QInstrument. >> >> CurrentChange and CurrentHolding are views returning subsets of the >> tables Change and Holding. >> >> Instrument is an abstract superclass with two children - fund and >> security. (Single table inheritance.) >> >> The 'fund' relationship in CurrentChange is a flattened relationship >> defined as 'currentHolding.instrument'. >> >> How can I find out where/why/how the incorrect GID is created? >> >> /Anders >> >> 115887 [WorkerThread0] DEBUG NSLog - === Begin Internal Transaction >> 115890 [WorkerThread0] DEBUG NSLog - evaluateExpression: >> <com.webobjects.jdbcadaptor.SybasePlugIn$SybaseExpression: "SELECT >> t0.communication_id, t0.holding_id, t0.change_id FROM >> QGroup.QsdCurrentChange t0, QGroup.QsdCurrentHolding T1, >> QGroup.QsdInstrument T2 WHERE T2.instrument_id = ? AND t0.holding_id >> = T1.holding_id AND T1.instrument_id = T2.instrument_id" >> withBindings: 1:10274(id)> >> 116149 [WorkerThread0] DEBUG NSLog - 761 row(s) processed >> 116157 [WorkerThread0] DEBUG NSLog - === Commit Internal Transaction >> 117590 [WorkerThread0] DEBUG NSLog - === Begin Internal Transaction >> 117597 [WorkerThread0] DEBUG NSLog - evaluateExpression: >> <com.webobjects.jdbcadaptor.SybasePlugIn$SybaseExpression: "SELECT >> t0.category, t0.tmp_current_value, t0.expected_return, >> t0.expected_variance, t0.tmp_export_change, t0.external_key, >> t0.instrument_id, t0.locked, t0.measured_return, >> t0.measured_variance, t0.name, RTRIM(t0.portrayal), t0.tagged, >> t0.type FROM QGroup.QsdInstrument t0 WHERE ((t0.type = ? OR t0.type = >> ?) AND t0.instrument_id = ?)" withBindings: 1:"O"(type), 2:"L"(type), >> 3:307183(id)> >> 117647 [WorkerThread0] DEBUG NSLog - 0 row(s) processed >> 117649 [WorkerThread0] DEBUG NSLog - === Commit Internal Transaction >> 134866 [WorkerThread0] WARN NSLog - >> <com.webobjects.appserver._private.WOComponentRequestHandler>: >> Exception occurred while handling request: >> java.lang.IllegalStateException: The object with globalID >> _EOIntegralKeyGlobalID[QInstrument (java.lang.Integer)307183] could >> not be found in the database. This could be result of a referential >> integrity problem with the database. An empty fault could not be >> created because the object's class could not be determined (e.g. the >> GID is temporary or it is for an abstract entity). >> 134880 [WorkerThread0] INFO NSLog - >> 134881 [WorkerThread0] INFO NSLog - ### Begin Problem Report ### >> 134882 [WorkerThread0] INFO NSLog - 2004-07-19 16:46:54 Etc/GMT >> 134882 [WorkerThread0] INFO NSLog - Victim: QsdOptApp >> 134882 [WorkerThread0] INFO NSLog - Problem: >> java.lang.IllegalStateException: The object with globalID >> _EOIntegralKeyGlobalID[QInstrument (java.lang.Integer)307183] could >> not be found in the database. This could be result of a referential >> integrity problem with the database. An empty fault could not be >> created because the object's class could not be determined (e.g. the >> GID is temporary or it is for an abstract entity). >> 134883 [WorkerThread0] INFO NSLog - >> 134886 [WorkerThread0] INFO NSLog - java.lang.IllegalStateException: >> The object with globalID _EOIntegralKeyGlobalID[QInstrument >> (java.lang.Integer)307183] could not be found in the database. This >> could be result of a referential integrity problem with the database. >> An empty fault could not be created because the object's class could >> not be determined (e.g. the GID is temporary or it is for an abstract >> entity). >> at >> com.webobjects.eoaccess.EODatabaseContext._fetchSingleObject(EODatabas >> eContext.java:3574) >> at >> com.webobjects.eoaccess.EODatabaseContext._objectFaultWithSnapshotRela >> tionshipEditingContext(EODatabaseContext.java:2533) >> at >> com.webobjects.eoaccess.EODatabaseContext._fireDeferredFaultWithSource >> Object(EODatabaseContext.java:2576) >> at >> com.webobjects.eoaccess.EOAccessDeferredFaultHandler.createFaultForDef >> erredFault(EOAccessDeferredFaultHandler.java:45) >> at >> com.webobjects.eocontrol.EOCustomObject.willReadRelationship(EOCustomO >> bject.java:1302) >> at >> com.webobjects.eocontrol._EOMutableKnownKeyDictionary$Initializer$_Laz >> yGenericRecordBinding.valueInObject(_EOMutableKnownKeyDictionary.java: >> 560) >> at >> com.webobjects.eocontrol.EOCustomObject.storedValueForKey(EOCustomObje >> ct.java:1736) >> at >> se.optimatika.proj.qsd.eo.QCDCurrentChange.getFund(QCDCurrentChange.ja >> va:185) >> >> _______________________________________________ >> WebObjects-dev mailing list >> [email protected] >> http://www.omnigroup.com/mailman/listinfo/webobjects-dev >