I think DataContext.invalidateObjects(...) method was present in 2.0. Still,
I'd recommend to update to Cay3 anyways.
BTW this message is already on Cayenne list
Regards,
Andrey
2009/1/7 John Armstrong <siberia..mail.com>
> Check with Andrus on the Cayenne list. They are usually pretty good
> about helping find the answer (rather then just saying 'Use 3.0!')
>
> Good luck, glad to see others are cayenning with Wicket!
>
> J
>
> On Wed, Jan 7, 2009 at 7:48 AM, Chad Smith <chadksmith..mail.com> wrote:
> > John,
> > I don't think you are missing the point and that looked promising. But
> it looks like RefreshQuery is a 3.0 bean and not available in 2.0.4.
> >
> > -Chad
> >
> > ----- Original Message -----
> > From: "John Armstrong" <siberia..mail.com>
> > To: use..ayenne.apache.org
> > Sent: Wednesday, January 7, 2009 8:33:08 AM GMT -07:00 US/Canada Mountain
> > Subject: Re: A little help w/ session state please
> >
> > This I think may be more of a cayenne problem. You have to reload the
> > object to destroy the cayenne cache using something like RefreshQuery.
> >
> > Thats what I have to do in many cases. Like this:
> >
> > context.deleteObject(theFeed);
> > context.commitChanges();
> > context.commitChangesToParent();
> > context.performQuery(new RefreshQuery(theFeed));
> >
> > I may be missing the point entirely, sorry :)
> > John-
> >
> > On Wed, Jan 7, 2009 at 6:04 AM, Chad Smith <chadksmith..mail.com>
> wrote:
> >> I have a web app that uses Cayenne 2.0.4 w/ Spring and it uses a servlet
> filter to manage the data context ...
> >>
> >> Request init code
> >> --------------------------------
> >> HttpSession session =
> ((HttpServletRequest)servletRequest).getSession(true);
> >> DataContext dataContext = ServletUtil.getSessionContext(session);
> >> DataContext.bindThreadDataContext(dataContext);
> >>
> >>
> >> Request destroy code
> >> --------------------------------
> >> DataContext dataContext = DataContext.getThreadDataContext();
> >> if (dataContext.hasChanges()) {
> >> dataContext.rollbackChanges();
> >> }
> >> DataContext.bindThreadDataContext(null);
> >>
> >> ... I also have a parent table and child table in which the child table
> has a circular reference to itself
> >>
> >> parent table: Forum
> >>
> >> forum.forum_id
> >>
> >> child table: forum_thread
> >>
> >> forum_thread.forum_id
> >> forum_thread.thread_id
> >> forum_thread.parent_thread_id (the circular reference)
> >>
> >> ... here is the cayenne mapping xml for the relationships ...
> >>
> >> <db-relationship name="forumToThread" source="forum"
> target="forum_thread" toMany="true">
> >> <db-attribute-pair source="forum_id" target="forum_id"/>
> >> </db-relationship>
> >> <db-relationship name="subThreadToThread" source="forum_thread"
> target="forum_thread" toMany="false">
> >> <db-attribute-pair source="parent_thread_id" target="thread_id"/>
> >> </db-relationship>
> >> <db-relationship name="threadToForum" source="forum_thread"
> target="forum" toMany="false">
> >> <db-attribute-pair source="forum_id" target="forum_id"/>
> >> </db-relationship>
> >> <db-relationship name="threadToSubThread" source="forum_thread"
> target="forum_thread" toMany="true">
> >> <db-attribute-pair source="thread_id" target="parent_thread_id"/>
> >> </db-relationship>
> >> <obj-relationship name="forumToThread" source="Forum" target="Thread"
> deleteRule="Cascade" db-relationship-path="forumToThread"/>
> >> <obj-relationship name="subThreadToThread" source="Thread"
> target="Thread" db-relationship-path="subThreadToThread"/>
> >> <obj-relationship name="threadToForum" source="Thread" target="Forum"
> db-relationship-path="threadToForum"/>
> >> <obj-relationship name="threadToSubThread" source="Thread"
> target="Thread" deleteRule="Cascade"
> db-relationship-path="threadToSubThread"/>
> >>
> >> ... here is the code I'm using to delete a thread ...
> >>
> >> public boolean deleteThread(int threadId) throws DataAccessException
> {
> >> // NOTE: transactions are auto commit unless otherwise specified!
> >> Thread thread = loadThread(threadId);
> >>
> >> // remove any parent association
> >> if (thread.getSubThreadToThread() != null) {
> >> Thread parentThread = thread.getSubThreadToThread();
> >> parentThread.removeFromThreadToSubThread(thread);
> >> }
> >>
> >> // remove forum association
> >> Forum forum = thread.getThreadToForum();
> >> forum.removeFromForumToThread(thread);
> >>
> >> super.delete(thread);
> >> return true;
> >> }
> >>
> >> ... so here is the problem: I setup the following data
> >>
> >> Forum record which has 3 top level thread records. Lets say thread 2
> has several children and several grand children. When I delete one of
> thread 2's children it does the database deletes perfectly (cascade deletes
> of the correct grandchildren), however, the gui continues to show the grand
> children but the child record (that was deleted) is gone. Here is the SQL
> and the data context looks clean before and after processing ....
> >>
> >> CayenneDao >>> --------------- Cayenne Context: 2009-01-07 06:49:40
> ----------------
> >> - hasChanges = false | isTransactionEventsEnabled = false |
> isUsingSharedSnapshotCache = true | isValidatingObjectsOnCommit = true
> >> 2009-01-07 06:49:40,953 INFO (QueryLogger.java:423) - --- will run 1
> query.
> >> 2009-01-07 06:49:40,953 INFO (QueryLogger.java:377) - --- transaction
> started.
> >> 2009-01-07 06:49:40,953 INFO (QueryLogger.java:300) - DELETE FROM
> gtools.forum_thread WHERE thread_id = ?
> >> 2009-01-07 06:49:40,953 INFO (QueryLogger.java:322) - [bind: 228]
> >> 2009-01-07 06:49:40,968 INFO (QueryLogger.java:368) - === updated 1 row.
> >> 2009-01-07 06:49:40,968 INFO (QueryLogger.java:322) - [bind: 227]
> >> 2009-01-07 06:49:40,968 INFO (QueryLogger.java:368) - === updated 1 row.
> >> 2009-01-07 06:49:40,968 INFO (QueryLogger.java:322) - [bind: 226]
> >> 2009-01-07 06:49:40,968 INFO (QueryLogger.java:368) - === updated 1 row.
> >> 2009-01-07 06:49:41,015 INFO (QueryLogger.java:384) - +++ transaction
> committed.
> >> CayenneDao >>> --------------- Cayenne Context: 2009-01-07 06:49:41
> ----------------
> >> - hasChanges = false | isTransactionEventsEnabled = false |
> isUsingSharedSnapshotCache = true | isValidatingObjectsOnCommit = true
> >>
> >> ... no matter where I go w/in the application the data (grand children)
> seems to stick in the cache but if I log off and back on they are now gone
> (no longer in the object cache). What am I doing wrong here? I know that
> is a lot to wade through but I would greatly appreciate any help on
> diagnosing the problem.
> >>
> >> Thanks in advance.
> >> Chad
> >>
> >
>
This archive was generated by hypermail 2.0.0 : Wed Jan 07 2009 - 11:58:37 EST