RE: error building Expressions: Can't resolve path component

From: Cris Daniluk (cris.danilu..laraview.com)
Date: Mon May 02 2005 - 09:35:07 EDT

  • Next message: Zvonimir Spajic: "Re: error building Expressions: Can't resolve path component"

    Zvonimir,

    If you only have the category id and not the actual Category object, I
    personally like to retrieve the object separately using DataObjectUtils
    (pragmatically, you need to use the pk from time to time, but the less time
    you spend internally communicating with pks, the better). This lets you use
    the method Andrus recommended. It might be an extra step, but it pays
    dividends in terms of clean code. On top of that, it may not even trigger a
    db lookup!

    An example:

    Category category = (Category) DataObjectUtils.objectForPk(context,
    Category.class, categoryId);

    Hope that helps,

    Cris

    > Hi Zvonimir,
    >
    > The cleanest way is probably to use a Category object as a
    > match parameter:
    >
    > Category catgeory = // ... obtain this object instead of usig id
    > Expression e = ExpressionFactory.matchExp("hasCategory", category);
    >
    > However if you want to match on an id, you should use "DB" flavor of
    > expressions. E.g.:
    >
    > Expression e =
    > ExpressionFactory.matchDbExp("hasCategory.id", categoryId);
    >
    > BTW, if you use Expression.fromString, Cayenne is using "db:"
    > prefix to
    > distinguish between object and database path (e.g:
    > "db:hasCategory.id").
    >
    > Hope this helps.
    >
    > Andrus
    >
    >
    > > I tried something out, and is
    > > this the best solution?
    > >
    > > Without defining the id in the path (hasCategory.id), only write
    > > hasCategory:
    > >
    > > ...
    > > Expression qual_2 = ExpressionFactory.matchExp("hasCategory",
    > > categoryId); ...
    > >
    > > Greets
    > > Zvonimir
    > >
    > >
    > >
    > > On Mon, 02 May 2005 15:06:38 +0200, Zvonimir Spajic
    > > <z.spaji..scensys.de> wrote:
    > >
    > >> Hello,
    > >>
    > >> 1) why it's not allowed to build an expression like this
    > >> --> see qual_2 (error message: "Can't resolve path component:
    > >> [Category.id]")
    > >>
    > >> ...
    > >> Expression qual_1 =
    > Expression.fromString(SomeObject.NAME_PROPERTY + "
    > >> likeIgnoreCase '%" + name + "%'");
    > >> Expression qual_2 = ExpressionFactory.matchExp("hasCategory.id",
    > >> categoryId);
    > >> qual_1 = qual_1.andExp(qual_2);
    > >> SelectQuery query = new SelectQuery(SomeObject.class, qual_1);
    > >> ...
    > >>
    > >> -id is the PK-Column of category table
    > >>
    > >> 2) what is the best solution in this cases.
    > >>
    > >> Thanks for help
    > >> Zvonimir Spajic
    >
    >
    >
    >



    This archive was generated by hypermail 2.0.0 : Mon May 02 2005 - 09:35:43 EDT