Roger that....appreciate it. On Fri, Jun 1, 2012 at 12:17 PM, Michael Gentry <[email protected]>wrote:
> Be sure you use the constants defined in _Person.java, too. > > ExpressionFactory.matchExp(Person.LAST_NAME_PROPERTY, "andy") > > (Although "andy" is an unlikely last name. :-) > > If you change the property name in Cayenne Modeler, you'll get new > constants when you generate the classes. Then your compile will blow > up and you can easily find all the changes you need to make. > (Compiler can't check Strings.) > > mrg > > > On Fri, Jun 1, 2012 at 11:50 AM, Andrew Faust <[email protected]> wrote: > > Thanks everybody. I'm gonna switch the code over to use the > > ExpressionFactory methods. Not that big of a deal. Appreciate it. > > > > On Fri, Jun 1, 2012 at 11:44 AM, Michael Gentry <[email protected] > >wrote: > > > >> Expression.fromString() does indeed take a string, but allows for > >> placeholders, too: > >> > >> > >> Expression expression = Expression.fromString("lastName = $lastName"); > >> > >> Map parameters = new HashMap(1); > >> parameters.put("lastName", "andy"); > >> > >> SelectQuery query = new SelectQuery(Person.class, > >> expression.expWithParameters(parameters)); > >> > >> > >> Should allow you to put booleans (and other values) in there, too. In > >> general, though, I agree with John that it is better (safer -- > >> compiler can check values) to use the ExpressionFactory.* methods. > >> > >> mrg > >> > >> > >> On Fri, Jun 1, 2012 at 10:44 AM, Andrew Faust <[email protected]> > wrote: > >> > Hey John appreciate the fast response...thanks. > >> > > >> > So.... > >> > String myFilter = "lastName = 'andy'" > >> > I understand that.... However > >> > String myFilter = "isStaffMember = 'true'" > >> > How do you translate that into it's "object" form as you recommended? > >> The > >> > Expression.*fromString* method requires a String. Are you suggesting > I > >> use > >> > a different filtering method that takes objects as parametes and not > >> > strings? Thanks again.. > >> > > >> > On Fri, Jun 1, 2012 at 10:31 AM, John Huss <[email protected]> > wrote: > >> > > >> >> The string 'true' is not the same as the literal value true. Same > for > >> >> dates. You need to pass these objects in object form, not as > strings. > >> >> > >> >> On Fri, Jun 1, 2012 at 8:59 AM, Andrew Faust <[email protected]> > >> wrote: > >> >> > >> >> > Good morning everybody. I am using the following code with > (mostly) > >> good > >> >> > results: > >> >> > > >> >> > > >> >> > ============================================================= > >> >> > > >> >> > String filterExpr = "*lastName* = 'Simth'; > >> >> > > >> >> > SelectQuery personQuery = new SelectQuery(Person.*class*); > >> >> > > >> >> > List<Person> fullPersonList = ormContext.performQuery(personQuery); > >> >> > > >> >> > Expression filterExp = Expression.*fromString*(filterExpr); > >> >> > > >> >> > List<Person> filteredPersonList = > >> >> filterExp.filterObjects(fullPersonList); > >> >> > > >> >> > ============================================================= > >> >> > > >> >> > This works well on any combination of operators such as =, >, <, > and > >> so > >> >> > on. This also worrks ok with numeric fields. So, for string and > >> numeric > >> >> > fields this code works ok. > >> >> > > >> >> > > >> >> > > >> >> > *HOWEVER*; when I try to filter fields that are booleans or dates > >> then I > >> >> * > >> >> > always* get back an empty results set. For example... > >> >> > > >> >> > > >> >> > > >> >> > Change filterExpr to *filterExpr = "isStaffMember = 'true'"* runs > ok > >> but > >> >> > returns 0 records which is NOT correct. Note that if I don't use > the > >> ' > >> >> > character then I get runtime EXCEPTIONS. > >> >> > > >> >> > Change filterExpr to *filterExpr = "startDate = '2012-02-01'" > *again > >> runs > >> >> > ok but returns 0 records which is NOT correct. > >> >> > > >> >> > > >> >> > > >> >> > Here are some of my runtime particulars: > >> >> > > >> >> > JDK/JRE: 1.6.0_31 > >> >> > > >> >> > Cayenne version: 3.0.2 > >> >> > > >> >> > DerbyDB version: 10.8.1.2 > >> >> > > >> >> > The database/java fields are: String=VARCHAR/String; numbers are > >> >> > integer/Integer; dates are DATE/Date; and booleans are > >> boolean/Boolean. > >> >> > > >> >> > > >> >> > > >> >> > In summary, the filterExpFilterObjects(...) seems to work fine IF > the > >> >> > fields are strings or numbers; but is NOT working as expected with > >> Dates > >> >> or > >> >> > Booleans. Any ideas anyone? > >> >> > > >> >> > >> >
