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 : Mon Mar 06 2006 - 15:53:31 EST