You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cayenne.apache.org by "David Marko (JIRA)" <de...@cayenne.apache.org> on 2007/10/09 21:08:52 UTC

[JIRA] Created: (CAY-877) ROR ActiveRecord like interface for Apache Cayenne

ROR ActiveRecord like interface for Apache Cayenne 
---------------------------------------------------

                 Key: CAY-877
                 URL: https://issues.apache.org/cayenne/browse/CAY-877
             Project: Cayenne
          Issue Type: New Feature
    Affects Versions: 2.0 [STABLE]
            Reporter: David Marko
            Assignee: Andrus Adamchik
            Priority: Minor


ROR ActiveRecord  like interface for Cayenne. Solution tries to bring alternative syntax for working with Apache Cayenne subsystem. Though its working its still subject of discussion and improvement. My idea is not to create other AR like ORM in JAVA  but rather create AR like interface for existing ORM.  I expect discussion on additional methods that will conform the concept.

The solution requires Java 5 as generics and some other features are being used. Here are just a few code snippets of how it can be used.

Syntax examples:
EntityManager em=new EntityManager();
em.setContext(DataContext.createDataContext());

// 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")



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Re: [JIRA] Created: (CAY-877) ROR ActiveRecord like interface for Apache Cayenne

Posted by Andrus Adamchik <an...@objectstyle.org>.
David,

not sure if you are on a dev list, so I am cc'ying to you directly.  
This looks nice. I think we can use it as an inspiration to build a  
utility class for querying the DB that we discussed before (can't  
find an archive link). Here is my assessment of what we need to do:

* come up with the name of the new class(es) (EntityManager and Query  
are already reserved in Cayenne).
* replace hardcoded SQLTemplates ("SELECT AVG($avg_field) as sum,  
$name as name  FROM ROLE GROUP BY $name") with the generated EJBQL  
syntax.
* we'd need to update it for Cayenne 3.0 (ObjectContext, Persistent  
instead of DataContext, DataObject)
* as a part of the upcoming Java 5 switch of the trunk, maybe  
parameterize existing ObjectContext and Query.

Thanks
Andrus

On Oct 9, 2007, at 10:08 PM, David Marko (JIRA) wrote:

> ROR ActiveRecord like interface for Apache Cayenne
> ---------------------------------------------------
>
>                  Key: CAY-877
>                  URL: https://issues.apache.org/cayenne/browse/CAY-877
>              Project: Cayenne
>           Issue Type: New Feature
>     Affects Versions: 2.0 [STABLE]
>             Reporter: David Marko
>             Assignee: Andrus Adamchik
>             Priority: Minor
>
>
> ROR ActiveRecord  like interface for Cayenne. Solution tries to  
> bring alternative syntax for working with Apache Cayenne subsystem.  
> Though its working its still subject of discussion and improvement.  
> My idea is not to create other AR like ORM in JAVA  but rather  
> create AR like interface for existing ORM.  I expect discussion on  
> additional methods that will conform the concept.
>
> The solution requires Java 5 as generics and some other features  
> are being used. Here are just a few code snippets of how it can be  
> used.
>
> Syntax examples:
> EntityManager em=new EntityManager();
> em.setContext(DataContext.createDataContext());
>
> // 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")
>
>
>
> -- 
> This message is automatically generated by JIRA.
> -
> You can reply to this email to add a comment to the issue online.
>
>