Skip to main content

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


Back to the top