Peter,

can you please highlight the (e.g. foreign key) constraints in your SQL
schema, just for completeness ?

Regards
Werner

peter cowan wrote:
> I have a pretty standard many-to-many relation mostly working, I can create
> , load and update objects fine, and the database tables populate as
> expected, however when I try to remove objects I am running into trouble.
> Below is a database description, the mapping and some example code.
> 
> database tables:
> 
> table - stuff:
> id - int
> name - varchar
> 
> table - things:
> id - int
> name - varchar
> 
> table - stuff_and_things:
> id - int
> stuff_id - int
> thing_id - int
> 
> <mapping>
>   <class name="my.test.app.Stuff" identity="id">
>     <map-to table="stuff"/>
>     <field name="id" type="int">
>       <sql name="id" type="integer" />
>     </field>
>     <field name="name" type="string">
>       <sql name="name" type="varchar" />
>     </field>
>     <field name="things" type="my.test.app.Thing"
>            collection="arraylist">
>       <sql name="stuff_id"
>            many-table="stuff_and_things"
>            many-key="thing_id" />
>     </field>
>   </class>
> 
>   <class name="my.test.app.Thing" identity="id">
>     <map-to table="things" />
>     <field name="id" type="int">
>       <sql name="id" type="integer" />
>     </field>
>     <field name="name" type="string">
>       <sql name="name" type="varchar" />
>     </field>
>   </class>
> </mapping>
> 
> Both Stuff and Thing are simple Java Beans and nothing more.
> 
> In the below example, the objects are created correctly in the first
> transaction, and loaded correctly in the second transaction. When I try to
> remove a Thing from the ArrayList data  member of Stuff, the Thing is only
> removed from the relation table stuff_and_things, and an orphan is left in
> the things table.  This makes enough sense, however, when I try to then
> remove the Thing from the database by uncommenting
> 'database.remove(thing);', I get an exception that it can't be removed due
> to foreign key constraints in stuff_and_things. This also makes sense, but I
> am left wondering, what am I doing wrong? How do I go about deleting those
> orphaned records without doing it in a second transaction?
> 
> public static void testStuffAndThings() {
>          Database database = jdoManager.getDatabase();
>          database.begin();
> 
>          Thing thing = new Thing(1,"My Thing");
>          Stuff stuff = new Stuff(1,"My Stuff");
>          ArrayList things = new ArrayList();
>          things.add(thing);
>          stuff.setThings(things);
> 
>          database.create(thing);
>          database.create(stuff);
>          database.commit();
> 
>          database.begin();
>          stuff = (Stuff) database.load(Stuff.class, 1);
>          things = stuff.getThings();
>          thing = things.remove(0);
>          //database.remove(thing);
>          database.commit();
>          database.close();
> }
> 
> thanks,
> -peter
> 

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to