Re: Cayenne ActiveRecord like interface

From: Robert Zeigler (robert..uregumption.com)
Date: Tue Oct 09 2007 - 08:29:01 EDT

  • Next message: Michael Gentry: "Re: SelectQuery and getting where clause"

    Hi David, I did something very similar (although your api looks
    cleaner than mine; I particularly liked the Query portion...) in a
    recent project combining tapestry 5 with cayenne.
    I was able to have a single "add/edit' page and a single "view" page
    for all of about 15 tables in the application, which would
    automatically pick up new properties, etc.
    There are certainly places in the application where a more detailed
    knowledge of the schema is necessary (there are only 15 tables, but
    some of them will store literally hundreds of thousands of records,
    and the app is required to generate fairly complicated reports; for
    performance purposes, using simple object queries, etc. just wouldn't
    always cut it...). At some point, I will very likely adapt my code
    for more general use outside of this particular project.

    Robert

    On Oct 9, 2007, at 10/97:21 AM , David Marko wrote:

    > Hello,
    > I like a ROR ActiveRecord a lot and I decided to create a special
    > interface for
    > Cayenne to let me work easier in most cases. I borrowed some ideas
    > and created a
    > wrapper for Apache Cayenne. Instead a common DAO like scenario of
    > using services
    > for each model, I can now use one EntityManager that serves for all
    > models.
    >
    > The solution requires Java 5 as generics and some other features
    > are beeing
    > used. Here are just a few code snippets of how it can be used.
    >
    > Syntax examples:
    > EntityManager em;
    > // create and save object
    > Contact contact=em.create(Contact.class);
    > em.saveChanges();
    >
    > // find object by id
    > Contact contact=em.findById(Contact.class, id);
    >
    > // find object by property
    > Contact contact=em.findFirstByProperty(Contact.class, "username",
    > form.getFieldValue("username"));
    >
    > // find many objects by property
    > List contacts=em.findAllByProperty(Contact.class, "subdomain.name",
    > "subdomain");
    >
    > // find objects based on user defined query
    > List contacts=em.findAllByQuery(Contact.class,
    > Query.select().where("subdomain = $subdomain and age > $age")
    > .param("subdomain", "agh")
    > .param("age", 18)
    > .order("lastname",true)
    > .offset(200)
    > .limit(10)
    > .include(Contact.ROLE_ARRAY_PROPERTY));
    >
    > // count items per invoice
    > List counts=em.count(Item.class, "invoice_id")
    >
    > Its just a special API interface that let you work with Apache
    > Cayenne in very
    > easy way. Of course there is still a place for DAO for more
    > advanced situations.
    > Is anyone else working on some similar approach? I would like to share
    > experiences/ideas.
    >
    > David
    >



    This archive was generated by hypermail 2.0.0 : Tue Oct 09 2007 - 08:29:53 EDT