Re: Context question

From: Andrey Razumovsky (razumovsky.andre..mail.com)
Date: Fri Oct 15 2010 - 07:31:36 UTC

  • Next message: Mathias Clerc: "Re: Context question"

    SelectQuery is actually a query to database, so viewing not-yet-inserted
    objects with it is not possible. See recent discussion:
    http://cayenne.markmail.org/search/%20list:org.apache.cayenne.user#query:%20list%3Aorg.apache.cayenne.user+page:2+mid:6bwqse4t4czj73zq+state:results

    2010/10/15 Borut Bolčina <borut.bolcin..mail.com>

    > Hello Mathias,
    >
    > context is similar to session in hibernate, but much better. The context is
    > where your persistent objects live in any of their possible state (
    > http://cayenne.apache.org/doc30/persistent-object-lifecycle.html).
    >
    > You are trying to rollback database changes made in previous step. This is
    > not what context.rollback() does. See last paragraph at
    > http://cayenne.apache.org/doc30/dataobject-state-management.html.
    >
    > When you do context.commit, you hit the database (or cache) if there are
    > any
    > changes in the object graph you created or modified in the context you are
    > trying to commit.
    >
    > What do you mean by: "How can I do some local changes to the dataset
    > without
    > having to commit them to the database?"
    >
    > Cheers,
    > Borut
    >
    > 2010/10/15 Mathias Clerc <tlarhice..mail.com>
    >
    > > Hello,
    > >
    > > I am making an evaluation of Cayenne and other frameworks.
    > >
    > > One of my test is the following :
    > >
    > > begin a set of operations
    > > make a select * on one table
    > > insert new element in that table
    > > make another select * on that table (see that new element along with
    > > the previous results)
    > > rollback
    > > make another select * on that table (see that it came back to it's
    > > original state)
    > >
    > >
    > > I am using the following code :
    > > ObjectContext context1 = DataContext.createDataContext();
    > > SelectQuery querySelectAll = new SelectQuery(Principal.class);
    > > System.out.println("-test pre");
    > > for (Object out : context1.performQuery(querySelectAll)) {
    > > System.out.println(((Principal) out).getName());
    > > }
    > >
    > > Principal newPrincipal = context1.newObject(Principal.class);
    > > newPrincipal.setName("toto");
    > > context1.registerNewObject(newPrincipal); //Same with or
    > > without this line
    > >
    > > SelectQuery querySelectAll2 = new SelectQuery(Principal.class);
    > > System.out.println("-test post");
    > > System.out.println("--c1");
    > > for (Object out : context1.performQuery(querySelectAll2)) {
    > > System.out.println(((Principal) out).getName());
    > > }
    > > System.out.println("--new context");
    > > for (Object out :
    > > DataContext.createDataContext().performQuery(querySelectAll2)) {
    > > System.out.println(((Principal) out).getName());
    > > }
    > >
    > > context1.rollbackChanges();
    > > System.out.println("-test post rollback");
    > > SelectQuery querySelectAll3 = new SelectQuery(Principal.class);
    > > System.out.println("--c1");
    > > for (Object out : context1.performQuery(querySelectAll3)) {
    > > System.out.println(((Principal) out).getName());
    > > }
    > > System.out.println("--new context");
    > > for (Object out :
    > > DataContext.createDataContext().performQuery(querySelectAll3)) {
    > > System.out.println(((Principal) out).getName());
    > > }
    > >
    > > And the output is :
    > > -test pre
    > > domain
    > > administrators
    > > admin
    > > -test post
    > > --c1
    > > domain
    > > administrators
    > > admin
    > > --new context
    > > domain
    > > administrators
    > > admin
    > > -test post rollback
    > > --c1
    > > domain
    > > administrators
    > > admin
    > > --new context
    > > domain
    > > administrators
    > > admin
    > >
    > > I think I have not understood completely what a context is.
    > > My question is in "test post" "c1" (created new element "toto", not
    > > commited, query done in the new element's context) shouldn't my new
    > > element appear ?
    > > If I do a commit on context1 then my element is visible, but it also
    > > hit the table.
    > >
    > > In case that behaviour is normal, how can I do some local changes to
    > > the dataset without having to commit them to the database ?
    > >
    > > Thank you,
    > >
    > > Tlarhices
    > >
    >

    -- 
    Andrey
    



    This archive was generated by hypermail 2.0.0 : Fri Oct 15 2010 - 07:32:30 UTC