Hello everybody! I've come across an issue with cross-model inheritance (single-table in this case). For a minimal test setup I added an EOModel FrameworkUser to ERMoviesLogic, containing an abstract parent entity AbstractUser and a concrete child entity FrameworkUser. I added a second EOModel AppUser with a concrete child of AbstractUser called AppUser to the ERModernMoviesTest app.
Fetching for all AbstractUser EOs does return all concrete child EOs, i.e. both FrameworkUser and AppUser. Accessing attributes that are available on AbstractUser is fine, but deleting an AppUser EO causes an exception: java.lang.IllegalStateException: Unable to find entity for object It turns out that the EOModel AppUser is not being added to the EODatabase when the fetch is carried out. Deletion with concrete child entity in FrameworkUser: ERXDatabase.addModel: FrameworkUser Feb 12 12:09:07 ERModernMoviesTest[9876] DEBUG NSLog - Using JDBCPlugIn 'H2PlugIn' for ERCompositeAdaptor@1026056307 Feb 12 12:09:07 ERModernMoviesTest[9876] DEBUG NSLog - connecting with dictionary: {driver = "org.h2.Driver"; plugin = "H2PlugIn"; password = "<password deleted for log>"; URL = "jdbc:h2:mem:ERModernMoviesTest"; } Feb 12 12:09:07 ERModernMoviesTest[9876] DEBUG NSLog - === Begin Internal Transaction Feb 12 12:09:07 ERModernMoviesTest[9876] DEBUG NSLog - evaluateExpression: <com.webobjects.jdbcadaptor._H2PlugIn$H2Expression: "SELECT t0.ACCESS_LEVEL, t0.CUSTOMER_ID, RTRIM(t0.PASSWORD), RTRIM(t0.TYPE), t0.USER_ID, RTRIM(t0.LOGIN) FROM rentalsuser t0 WHERE (t0.TYPE = ? OR t0.TYPE = ?)" withBindings: 1:"app"(type), 2:"framework"(type)> Feb 12 12:09:07 ERModernMoviesTest[9876] DEBUG NSLog - 4 row(s) processed Feb 12 12:09:07 ERModernMoviesTest[9876] DEBUG NSLog - === Commit Internal Transaction FetchTask._call: ringle: app FetchTask._call: jboyles: app FetchTask._call: lstark: app FetchTask._call: jjeffers: framework => java.lang.IllegalStateException: Unable to find entity for object <webobjectsexamples.businesslogic.common.AppUser pk:"4"> Deletion with only abstract parent entity AbstractUser in FrameworkUser: ERXDatabase.addModel: FrameworkUser Feb 12 12:11:36 ERModernMoviesTest[9876] DEBUG NSLog - Using JDBCPlugIn 'H2PlugIn' for ERCompositeAdaptor@22939787 Feb 12 12:11:36 ERModernMoviesTest[9876] DEBUG NSLog - connecting with dictionary: {driver = "org.h2.Driver"; plugin = "H2PlugIn"; password = "<password deleted for log>"; URL = "jdbc:h2:mem:ERModernMoviesTest"; } Feb 12 12:11:36 ERModernMoviesTest[9876] DEBUG NSLog - === Begin Internal Transaction Feb 12 12:11:36 ERModernMoviesTest[9876] DEBUG NSLog - evaluateExpression: <com.webobjects.jdbcadaptor._H2PlugIn$H2Expression: "SELECT t0.ACCESS_LEVEL, t0.CUSTOMER_ID, RTRIM(t0.PASSWORD), RTRIM(t0.TYPE), t0.USER_ID, RTRIM(t0.LOGIN) FROM rentalsuser t0 WHERE t0.TYPE = ?" withBindings: 1:"app"(type)> Feb 12 12:11:36 ERModernMoviesTest[9876] DEBUG NSLog - 3 row(s) processed Feb 12 12:11:36 ERModernMoviesTest[9876] DEBUG NSLog - === Commit Internal Transaction FetchTask._call: ringle: app FetchTask._call: jboyles: app FetchTask._call: lstark: app => java.lang.IllegalStateException: Unable to find entity for object <webobjectsexamples.businesslogic.common.AppUser pk:"4"> Interestingly, the restricting qualifier is being correctly generated, i.e. it contains the type for "app" and for "framework" EOs. As a workaround, I add the following before the fetch EODatabaseContext.registeredDatabaseContextForModel(ERXModelGroup.defaultGroup().modelNamed("AppUser"), ec); which forces the model to be loaded. Now, my question is where can this be fixed in a generic manner? The fetch causes an EOCooperatingObjectStoreNeededNotification notification to be sent, which gets handled by EODatabaseContext._cooperatingObjectStoreNeeded(). But that's a static method… Fabian P.S.: The fetch in question takes place in an EC created with an EOObjectStoreCoordinator from the ERXTaskObjectStoreCoordinatorPool. AFAICT this is only relevant in that the EOModel is more likely to not having been added, compared to using an EOObjectStoreCoordinator that is shared among sessions. _______________________________________________ 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