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? >> >> > >> >> >>
