cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Gentry <mgen...@masslight.net>
Subject Re: testing many to many
Date Sun, 06 Jan 2013 16:20:48 GMT
Hi there,

You told Cayenne to delete the DataSource (datasource1) from the database,
but you didn't remove datasource1 from the object graph.  Cayenne usually
considers these separate operations*.  This is why you can still call:

System.out.println(blog1.getDatasources().get(0)); // prints datasource0
System.out.println(blog1.getDatasources().get(1)); // prints datasource1 <=
WHY?

Your datasource1 object is still in the object graph even though you
deleted it from the database.  Try adding something like
blog1.removeFromDatasources(blog1.getDatasources().get(1)) after your
deleteObjects call.

*The reason why Cayenne keeps remove/delete separate is because you may
want to remove a a DataSource from one Blog and attach it to another Blog.
 Also, sometimes you just want to unlink the Datasource, but not delete it.
 Therefore, you tell Cayenne explicitly to remove from the object graph and
to delete the object.

mrg

PS. I *think* you can put a Nullify delete rule from DataSource to Blog to
have it auto-remove (datasource1) from the object graph, but it has been
ages since I've tried that, so I most likely am wrong.  I personally prefer
to have both operations (remove and delete) explicitly stated in the code
so I can see exactly the intent there instead of having to look at two
different sources (code+model).



On Sat, Jan 5, 2013 at 8:12 AM, emeka okafor <emeka_1978@yahoo.com> wrote:

>  I stumbled across a weird thing today and believe that it has something
> to do with the fact that I am a cayenne newbie. Here is the situation:
>
> I have a many-to-many relationship: Blog <<=>> DataSource.
> I have configured it in the modeler the simplest way possible, without any
> specific relationship table and no flattened relation.
> I have this test snippet:
>
> System.out.println(blog1.getDatasources().get(0));
>            // prints datasource0
> System.out.println(blog1.getDatasources().get(1));
>            // prints datasouce1
>
> blog1.getObjectContext().deleteObjects(blog1.getDatasources().get(1));  //
> delete datasource1
> blog1.getObjectContext().commitChanges();
>            // commit changes
> System.out.println(blog1.getDatasources().get(0));
>             // prints datasource0
> System.out.println(blog1.getDatasources().get(1));
>             // prints datasource1 <= WHY?
> Assert.assertEquals(1, blog1.getDatasources().size());
>            // FAILS
>
> Am I doing something wrong here?
>
> Thanks.

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message