Dear all, [ Using Wonder with WO54 and PostgreSQL. ]
Is it appropriate to remove foreign key constraints when you get into hairy and complex webobjects inheritance? I have an abstract entity Form with many subentities using horizontal inheritance. This has worked perfectly and I have subentities representing various structured and unstructured data collection forms as well as medical investigation results. I also have an abstract entity Annotation and a number of concrete subentities to add additional optional data to a form. There is a to-many relationship between the abstract entity Form (db table: t_form) and the abstract entity Annotation (db table: t_annotation). There is logic to create concrete instances of subentities of the correct type and link appropriate annotation subentities to the appropriate form subentity. I keep getting exceptions due to foreign key constraints. I suspect my solution is to remove these but I had assumed there would be some magic going on within EOF to handle this. I *thought* the topmost entity's primary key sequence generator would be used for all subentities? EOEditingContext ec = ERXEC.newEditingContext(); Patient pt = Patient.fetchPatient(ec, Patient.PATIENT_IDENTIFIER.eq(7271L)); NSArray<Encounter> encounters = pt.encounters(null, Encounter.DATE_TIME.descs(), false); Encounter e = encounters.get(0); FormResultMriBrain fr = (FormResultMriBrain) EOUtilities.createAndInsertInstance(ec, FormResultMriBrain.ENTITY_NAME); fr.setUser(User.fetchRequiredUser(ec, User.USERNAME_KEY, "mark")); fr.setDatePerformed(new NSTimestamp()); fr.setDateReported(new NSTimestamp()); fr.setReport("A normal scan"); e.addToForms(fr); AnnotationMriBrainAtaxia ataxia = (AnnotationMriBrainAtaxia) EOUtilities.createAndInsertInstance(ec, AnnotationMriBrainAtaxia.ENTITY_NAME); ataxia.setForm(fr); ataxia.setDateCreated(new NSTimestamp()); ataxia.setCerebellarAtrophy(false); ataxia.setCerebralAtrophy(false); ataxia.setLeucodystrophy(false); ataxia.setPontineAtrophy(false); ataxia.setUser(fr.user()); AnnotationMriBrainMultipleSclerosis annotation = (AnnotationMriBrainMultipleSclerosis) EOUtilities.createAndInsertInstance(ec, AnnotationMriBrainMultipleSclerosis.ENTITY_NAME); annotation.setForm(fr); annotation.setUser(fr.user()); ec.saveChanges(); And this is my log file: [apologies for the terribly long entity and table names] Nov 20 21:59:49 RSNews[52700] DEBUG com.eldrix.rsdb.model._Form - updating dateCreated from null to 2010-11-20 21:59:49 Etc/GMT Nov 20 21:59:49 RSNews[52700] DEBUG com.eldrix.rsdb.model._FormResult - updating dataSourceType from null to MANUAL Nov 20 21:59:49 RSNews[52700] DEBUG com.eldrix.rsdb.model._FormResultMriBrain - updating withGadolinium from null to false Nov 20 21:59:49 RSNews[52700] DEBUG com.eldrix.rsdb.model._FormResult - updating datePerformed from null to 2010-11-20 21:59:49 Etc/GMT Nov 20 21:59:49 RSNews[52700] DEBUG com.eldrix.rsdb.model._FormResult - updating dateReported from null to 2010-11-20 21:59:49 Etc/GMT Nov 20 21:59:49 RSNews[52700] DEBUG com.eldrix.rsdb.model._FormResultMriBrain - updating report from null to A normal scan Nov 20 21:59:50 RSNews[52700] DEBUG com.eldrix.rsdb.model._Annotation - updating dateCreated from null to 2010-11-20 21:59:50 Etc/GMT Nov 20 21:59:50 RSNews[52700] DEBUG com.eldrix.rsdb.model._AnnotationMriBrainAtaxia - updating cerebellarAtrophy from null to false Nov 20 21:59:50 RSNews[52700] DEBUG com.eldrix.rsdb.model._AnnotationMriBrainAtaxia - updating cerebralAtrophy from null to false Nov 20 21:59:50 RSNews[52700] DEBUG com.eldrix.rsdb.model._AnnotationMriBrainAtaxia - updating leucodystrophy from null to false Nov 20 21:59:50 RSNews[52700] DEBUG com.eldrix.rsdb.model._AnnotationMriBrainAtaxia - updating pontineAtrophy from null to false Nov 20 21:59:50 RSNews[52700] DEBUG er.eo.ERXGenericRecord - EditingContextWillSaveChanges: done calling will* Nov 20 21:59:50 RSNews[52700] WARN NSLog - A fatal exception occurred: ERROR: insert or update on table "t_annotation_mri_brain_ataxia" violates foreign key constraint "t_annotation_mri_brain_ataxia_form_fk_id_fk" Detail: Key (form_fk)=(29) is not present in table "t_form". [2010-11-20 21:59:50 GMT] <main> ERROR: insert or update on table "t_annotation_mri_brain_ataxia" violates foreign key constraint "t_annotation_mri_brain_ataxia_form_fk_id_fk" Detail: Key (form_fk)=(29) is not present in table "t_form".at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) at org.postgresql.jdbc2.AbstractJdbc2Connection.executeTransactionCommand(AbstractJdbc2Connection.java:671) at org.postgresql.jdbc2.AbstractJdbc2Connection.commit(AbstractJdbc2Connection.java:691) at com.webobjects.jdbcadaptor.JDBCContext.commitTransaction(JDBCContext.java:452) at com.webobjects.eoaccess.EODatabaseContext.commitChanges(EODatabaseContext.java:6303) 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:1085) at er.extensions.eof.ERXEC.saveChanges(ERXEC.java:1007) at com.eldrix.news.app.Application.<init>(Application.java:83) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at java.lang.Class.newInstance0(Class.java:355) at java.lang.Class.newInstance(Class.java:308) at com.webobjects.appserver.WOApplication.main(WOApplication.java:547) at er.extensions.appserver.ERXApplication.main(ERXApplication.java:783) at com.eldrix.news.app.Application.main(Application.java:41) at com.webobjects.jdbcadaptor.JDBCContext.commitTransaction(JDBCContext.java:455) at com.webobjects.eoaccess.EODatabaseContext.commitChanges(EODatabaseContext.java:6303) 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:1085) at er.extensions.eof.ERXEC.saveChanges(ERXEC.java:1007) at com.eldrix.news.app.Application.<init>(Application.java:83) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at java.lang.Class.newInstance0(Class.java:355) at java.lang.Class.newInstance(Class.java:308) at com.webobjects.appserver.WOApplication.main(WOApplication.java:547) at er.extensions.appserver.ERXApplication.main(ERXApplication.java:783) at com.eldrix.news.app.Application.main(Application.java:41)
_______________________________________________ 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: http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com