Re: Use Query in Cayenne

From: Matt Kerr (mat..entralparksoftware.com)
Date: Fri Jun 25 2004 - 09:34:46 EDT

  • Next message: Andrus Adamchik: "Cayenne Gathering Reminder"

    hey webobjects -)

    > i face difficulties do find the correct Documentation explinantion
    > about how
    > to use the Query in Cayenne.
    > i mean in the GUI in Cayenne. how to set the Gerner, Orderings,
    > Prefetches.
    > and how to use it in the java code!

    i think it goes something like ...
    please note - i did touch this up w/out recompile or anything
    so, if there are syntax errors, missing steps, etc. .. add salt.
    cheers- matt

    in the modeler:
    ~~~~~~~~~~~~~~~
    1) Project -> Create Queary

    2) SelectQuery: General panel ...
            * Query Name (eg. "MyMedicalOfficeQuery")
            * Query Root (entity you are fetching, eg. MedicalOffice)
            * Qualifier
    (doctor.lastName likeIgnoreCase $LastNameParam) and (db:doctorNumber =
    $DoctorNumberParam) and (db:groupNumber = $GroupNumberParam)
            [note: the use of "db:" for db attributes]

            * these other flavor as needed ... but i see here: Distinct=(No),
    Result Caching=(No), Fetch Data Rows=(No), Refresh Objects=(Yes), Fetch
    Limit=(0), Page Size=(0)

    3) SelectQuery: Orderings panel
            * i see just doctor.lastName (and the first box checked; second box
    not checked -- haha ... yeah ... what does that mean?) ... add/remove
    as needed

    4) SelectQuery: Prefetches panel
            * this one here is empty ... but yeah, add/remove as needed (based on
    your performance needs, etc.)

    in the .java:
    ~~~~~~~~~~~~~
    1) create your map (from like FORM values)
            * note the keys here match the query arg keys above
                    Map map = new HashMap();
                    if (!StringUtils.isEmpty(getGroupNumber())) {
                            map.put("GroupNumberParam", getGroupNumber());
                    }
                    if (!StringUtils.isEmpty(getDoctorNumber())) {
                            map.put("DoctorNumberParam", getDoctorNumber());
                    }
                    if (!StringUtils.isEmpty(getLastName())) {
                            map.put("LastNameParam", getLastName() + "%");
                    }

    2) grab query, and perform fetch ...
            SelectQuery query =
    ModelUtils.queryWithNameAndMap("MyMedicalOfficeQuery", map);
            List objects = getDataContext().performQuery(query);

    3) here are straightforward conveniences ...
    ModelUtils.java:
            import org.objectstyle.cayenne.conf.Configuration;
            static public SelectQuery queryWithNameAndMap(String name, Map map) {
                    if ( (name == null) || (map == null) ) { // WANNA: assert these
    probably
                            return null;
                    }
                    SelectQuery query = (SelectQuery)
    getEntityResolver().lookupQuery(name);
                    return query.queryWithParameters(map);
            }
            static public EntityResolver getEntityResolver() {
                    return
    Configuration.getSharedConfiguration().getDomain().getEntityResolver();
            }



    This archive was generated by hypermail 2.0.0 : Fri Jun 25 2004 - 09:36:00 EDT