Joe,
this part did not change much, except for some cache refreshing
tricks described here:
http://objectstyle.org/confluence/display/CAYDOC/Caching+Query+Results
Still individual objects and query results are disassociated from
each other. I tried to explain why this is done in such way in this
message:
http://www.objectstyle.org/cayenne/lists/cayenne-devel/2006/02/0065.html
So in your case you won't see a new object in the query caches until
commit.
Andrus
On Mar 6, 2006, at 11:53 PM, McDaniel, Joe R. wrote:
> I have not used Cayenne for about a year and thought I understood
> how it works. I want to get a value from the database if it
> exists, otherwise add it. If I add an object, I assumed it would be
> retrieved from the cache on the next iteration needing that same
> value, but that only happens if I have done a commit. Must I always
> do a commit or is there some other magic to get what I want working
> to do the "right thing?"
>
> Best,
>
> Joe
>
> Expression qual = ExpressionFactory.matchExp("lexical", value);
>
> SelectQuery query = new SelectQuery(Symbols.class, qual);
>
> // configure query to use local cache (supposedly this was the
> "magic")
> query.setName("FindSymbol");
> query.setCachePolicy(GenericSelectQuery.LOCAL_CACHE);
>
> List values = ctxt.performQuery(query);
>
> Symbols symbol = null;
> Long retval = null;
> if(values == null || values.size() == 0)
> {
> // value does not exist, add new value
> Symbols newSymbol = (Symbols)ctxt.createAndRegisterNewObject
> (Symbols.class);
> newSymbol.setLexical(value);
> retval = new Long(pk++);
> newSymbol.setHash(retval);
> newSymbol.setDatatype(new Integer(0));
> newSymbol.setLanguage(new Integer(0));
> } else
> {
> symbol = (Symbols)values.get(0);
> retval = symbol.getHash();
> hits++
> }
> return retval;
>
This archive was generated by hypermail 2.0.0 : Tue Mar 07 2006 - 02:05:21 EST