Chapter 4. Using the Finder
Prev | Part VI. Reverse Mapping Tool Tutorial | Next

## Chapter 4. Using the Finder

The `reversetutorial.Finder` class lets you run queries in JDOQL (JDO's Java-centric query syntax) against the existing database:

    java reversetutorial.Finder <jdoql-query>

JDOQL is discussed in the JDO Overview . JDOQL looks exactly like Java boolean expressions. To find magazines matching a set of criteria in JDOQL, just specify conditions on the `reversetutorial.Magazine` class' persistent fields. Some examples of valid JDOQL queries for magazines include:

    java reversetutorial.Finder "true"  // use this to list all the magazines
    java reversetutorial.Finder "price < 5.0"
    java reversetutorial.Finder "name == \"Vogue\" || issue > 1000"
    java reversetutorial.Finder "name.startsWith (\"V\")"

To traverse object relations, just use Java's dot syntax:

    java reversetutorial.Finder "publisher.name == \"Adventure\" || publisher.revenue > 1000000"

To traverse collection relations, you have to use JDOQL variables. Variables are just placeholders for any member of a collection. For example, in the following query, `art` is a variable:

    java reversetutorial.Finder "articles.contains (art) && art.title.startsWith (\"JDO\")"

The above query is equivalent to "find all magazines that have an article whose title starts with 'JDO'". The `reversetutorial.Finder` pre-defines two variables you can use: `Article art; Magazine mag;`. With these, you can create very complex queries. For example, to find all magazines whose publisher published an article about "Surpassing Hubble" in any of its magazines:

    java reversetutorial.Finder "publisher.magazines.contains (mag) && mag.articles.contains (art) && art.articleSubtitles.contains (\"Surpassing Hubble\")"

Have fun experimenting with additional queries.

| Note
For a complete treatment of the reverse mapping tool, including how to customize generated classes and mappings, see the Reference Guide.

Prev | Up | Next
Chapter 3. Generating Persistent Classes | Home | Appendix A. Development and Runtime Libraries