[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [eclipselink-users] Search using Expression API - Is there an easier way?
|
Thanks that's slightly better I suppose, I didn't think to do it that
way. My only issue with QBE is it's not quite flexible enough for more
complex queries from what I can see. Though I was unable to find a
list of all the different qbe policies, someone doesn't happen to have
a link to that do they? Or even better if the string constants for the
addSpecialOperation method were constants in a class somewhere that
would be nice.
./tch
On Tue, Nov 10, 2009 at 10:45 AM, James Sutherland <jamesssss@xxxxxxxxx> wrote:
>
> Not certain what you mean, but this may be simpler,
>
> private Expression getSearchExpression(MyFruit fruit)
> {
> Expression eb = new ExpressionBuilder();
> Expression expression;
> if(!example.getColor().isEmpty())
> expression =
> eb.get("color").equal(example.getColor()).and(expression);
>
> if(!example.getTaste().isEmpty())
> expression =
> eb.get("taste").equal(example.getTaste()).and(expression);
>
> if(!example.getSmell().isEmpty())
> expression =
> eb.get("smell").equal(example.getSmell()).and(expression);
>
> return expression;
> }
>
> You may also wish to investigate EclipseLink's Query By Example
> (ReadAllQuery.setExampleObject()).
>
>
> tch wrote:
>>
>> I am starting to play with the expression API more, and it seems a bit
>> clunky to me. Perhaps I'm just dense, but the issue seems to be the
>> need to logically join each condition.
>>
>> This gets really messy when you're trying to do a generic search in a
>> web app - there are 20 fields, each field they enter a value on should
>> be anded with any other fields present. This is a pretty common
>> pattern.
>>
>> I was hoping I would be able to have the expression built
>> automatically perhaps with a default logical condition somehow. I
>> could probably build something in a half hour that did that, but it
>> seems like this functionality should exist somewhere already. How are
>> other people dealing with this common pattern?
>>
>> Here's what I came up with, as the simplest solution, am I missing
>> something? It's tedious with all the null checking, etc.
>>
>> private Expression getSearchExpression(MyFruit fruit)
>> {
>> Expression eb = new ExpressionBuilder();
>> Expression color = null,taste = null,smell = null;
>> if(!example.getColor().isEmpty())
>> color = eb.get("color").equal(example.getColor());
>>
>> if(!example.getTaste().isEmpty())
>> taste = eb.get("taste").equal(example.getTaste());
>>
>> if(!example.getSmell().isEmpty())
>> smell = eb.get("smell").equal(example.getSmell());
>>
>> return andConditions(color,taste,smell);
>> }
>>
>>
>> private Expression andConditions(Expression...exps)
>> {
>> if(exps == null)
>> return null;
>>
>> if(exps.length == 1)
>> return exps[0];
>>
>> Expression e = null;
>> boolean initExp = false;
>> for (Expression tmpE : exps) {
>> if(tmpE != null)
>> {
>> if(!initExp)
>> {
>> e = tmpE;
>> initExp = true;
>> }
>> else
>> {
>> e = e.and(tmpE);
>> }
>> }
>> }
>> return e;
>> }
>>
>>
>> ./tch
>>
>>
>
>
> -----
> http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland
> http://www.eclipse.org/eclipselink/
> EclipseLink , http://www.oracle.com/technology/products/ias/toplink/
> TopLink
> Wiki: http://wiki.eclipse.org/EclipseLink EclipseLink ,
> http://wiki.oracle.com/page/TopLink TopLink
> Forums: http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink ,
> http://www.nabble.com/EclipseLink-f26430.html EclipseLink
> Book: http://en.wikibooks.org/wiki/Java_Persistence Java Persistence
> --
> View this message in context: http://old.nabble.com/Search-using-Expression-API---Is-there-an-easier-way--tp26267399p26285674.html
> Sent from the EclipseLink - Users mailing list archive at Nabble.com.
>
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>