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

Reply via email to