dlr         01/08/08 10:31:39

  Modified:    xdocs/howto peers-howto.xml
  Log:
  Patch by Finn Smith <[EMAIL PROTECTED]> which brings the Peer Howto
  more up to date.
  
  Revision  Changes    Path
  1.10      +51 -129   jakarta-turbine/xdocs/howto/peers-howto.xml
  
  Index: peers-howto.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine/xdocs/howto/peers-howto.xml,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -u -r1.9 -r1.10
  --- peers-howto.xml   2001/07/06 18:24:13     1.9
  +++ peers-howto.xml   2001/08/08 17:31:39     1.10
  @@ -195,6 +195,10 @@
   happen often) you are still free to use raw sql queries.
   </p>
   
  +<p>
  +There is more information on the use of the Criteria class in a seperate <a href 
="./criteria-howto.html">Criteria Howto</a>.
  +</p>
  +  
   </section>
   
   <section name="ID Broker">
  @@ -420,72 +424,28 @@
      </p>
   
     <p>
  -   <strong>Note:</strong> some information here is out of date (Subclassing).
  -   The <a href="../classhierarchy.html">Class Hierarchy</a> document provides
  -   more current information regarding mapping a hierarchy in the OM/Peer 
  -   system.
  +   <strong>Note:</strong> The <a href="../classhierarchy.html">Class
  +   Hierarchy</a> document provides more information regarding mapping a
  +   hierarchy in the OM/Peer system.
     </p>
   
     </section>
   
     <section name="Subclassing">
      <p>
  -     Usually when we begin to add extra code for Peer classes we end up with the
  -     problem of where to add the code.  If we add it to the generated Peer
  -     classes we will loose everything if (and trust me this does happen) we
  -     need to regenerate the classes.
  +     Usually when we begin to add extra code for Peer classes we end up with
  +     the problem of where to add the code.  If we add it to the generated
  +     BaseItemPeer and BaseCategoryPeer classes we will lose everything if
  +     (and trust me this does happen) we need to regenerate these classes.
      </p>
   
  -   <p>
  -     The solution is to create new classes that inherits from the generated
  -     classes and to add the extensions here.  This has the benefit that we can
  -     generate new classes at any time and still maintain any changes we added.
  -   </p>
  -   <p>
  -     To subclass successfully we need two new subclasses for each table.  One
  -     for the data object and one for the peer class. <strong>Very 
Important:</strong>
  -     you need to override the doSelect() method of the Peer class to make sure
  -     that it creates objects of your new data object. If you don't do this you
  -     will still end up with instances of the original class and not your new
  -     class.
  -   </p>
      <p>
  -     Here's how we are create new classes for the Category and Item tables.
  +     The solution is to add the extensions to the subclasses ItemPeer and
  +     CategoryPeer. We can regenerate the Peer classes at any time and still
  +     maintain any changes we add. Regenerating the Peers from the XML schema
  +     only affects the Base classes. The other classes are left untouched.
      </p>
  -   
  -<source>
  -public class MyCategoryPeer extends CategoryPeer
  -{
  -   static public Vector doSelect (Criteria criteria) throws Exception
  -   {
  -       // Be sure to add the new class here
  -       return doSelect (criteria,"com.mycompany.om.MyCategory",null);
  -   }
  -}
  -
  -public class MyItemPeer extends ItemPeer
  -{
  -   static public Vector doSelect (Criteria criteria) throws Exception
  -   {
  -       // Be sure to add the new class here
  -       return doSelect (criteria,"com.mycompany.om.MyItem",null);
  -   }
  -}
  -</source>
  -
  -<source>
  -public class MyCategory extends Category
  -{
  -}
  -
  -public class MyItem extends Item
  -{
  -}
  -</source>
   
  -   <p>
  -     That is all there is to it, now we can start to write some code.
  -   </p>
     </section>
   
     <section name="Useful Methods">
  @@ -497,14 +457,8 @@
       </p>
   
   <source>
  -public class MyCategoryPeer extends CategoryPeer
  +public class CategoryPeer extends BaseCategoryPeer
   {
  -    static public Vector doSelect (Criteria criteria) throws Exception
  -    {
  -       // Be sure to add the new class here
  -       return doSelect (criteria,"com.mycompany.om.MyCategory",null);
  -    }
  -
       static public Vector doSelectAll() throws Exception
       {
           Criteria crit = new Criteria();
  @@ -520,14 +474,8 @@
        add a doSelectForCategory to the ItemPeer class.
      </p>
   <source>
  -public class MyItemPeer extends ItemPeer
  +public class ItemPeer extends BaseItemPeer
   {
  -    static public Vector doSelect (Criteria criteria) throws Exception
  -    {
  -        // Be sure to add the new class here
  -        return doSelect (criteria,"com.mycompany.om.MyCategory",null);
  -    }
  -
       static public Vector doSelectForCategory(int categoryid) throws Exception
       {
           Criteria crit = new Criteria();
  @@ -541,72 +489,42 @@
     <section name="Joins and linking objects">
       <p>
         Sometimes you would like to have relations between tables be available
  -      in the Peer objects.  For example you want the category of an item to be
  -      available through a getCategory() method.
  +      in the Peer objects. We defined a foreign key relationship
  +      in the Item table in the XML schema. This means getCategory() and
  +      setCategory() methods are generated in the BaseItem class. In a
  +      relational database the foreign key allows us to access the Category
  +      row that is associated with a specific Item row. In the object model,
  +      an Item class represents one row from the Item table. The getCategory()
  +      method will return a reference to a Category class that represents
  +      the associated row from the Category table.
       </p>
  -    <p>
  -      The first thing we need to do is to add getCategory() and setCategory()
  -      methods to the MyItem class.
  -    </p>
  -<source>
  -public class MyItem extends Item
  -{
  -    private MyCategory category;
   
  -    public MyCategory getCategory()
  -    {
  -        return this.category;
  -    }
  -
  -    public void setCategory (MyCategory category)
  -    {
  -        this.category = category;
  -    }
  -}
  +   <p>
  +     A doSelectJoinCategory() method is generated for the BaseItemPeer
  +     class. It creates the join between tables and sets the Category
  +     reference in the Item class. It can be used like this:
  +   </p>
  +<source>
  +// select all Items with their associated Category
  +Criteria crit = new Criteria();
  +Vector v = ItemPeer.doSelectJoinCategory(crit);
  +// access the Category associated with the first Item in the vector
  +Item itm = (Item)v.elementAt(0);
  +Category cat = itm.getCategory();
   </source>
      <p>
  -     Next we need to create a doSelectWithCategory() method for the ItemPeer
  -     class that creates the join between tables and inserts the category. We
  -     do it like this:
  +    We can also constrain the selected rows just as we would with a normal
  +    doSelect() method:
      </p>
   <source>
  -public Vector doSelectWithCategory (Criteria crit) throws Exception
  -{
  -    crit.addJoin (ItemPeer.CATEGORY_ID, CategoryPeer.CATEGORY_ID);
  -
  -    addSelectColumns ( criteria );
  -    CategoryPeer.addSelectColumns ( criteria );
  -
  -    // BasePeer returns a Vector of Value (Village) arrays.  The array
  -    // order follows the order columns were placed in the Select clause.
  -
  -    Vector rows = BasePeer.doSelect(criteria);
  -
  -    Vector results = new Vector();
  -
  -    // populate the object(s)
  -    for ( int i=0; i&lt;rows.size(); i++ )
  -    {
  -        Record row = (Record)rows.elementAt(i);
  -
  -        MyItem itm = row2Object (row,
  -                                 1,
  -                                 Class.forName
  -                                 ("com.mycompany.om.MyItem"));
  -
  -        MyCategory cat = CategoryPeer.row2Object
  -                                (row,
  -                                numColumns+1,
  -                                Class.forName
  -                                ("com.mycompany.om.MyCategory"));
  -
  -        itm.setCategory (cat);
  -        results.add (itm);
  -     }
  -
  -     return results;
  -
  -}
  +// select only Items with a category of 2
  +Criteria crit = new Criteria();
  +crit.add(Item.CATEGORY_ID, 2);
  +Vector v = ItemPeer.doSelectJoinCategory(crit);
  +// get the name of category 2
  +Item itm = (Item)v.elementAt(0);
  +Category cat = itm.getCategory();
  +String name = cat.getName();
   </source>
     </section>
     
  @@ -633,6 +551,10 @@
   
   crit.add( a1.and(b2).or(a5.and(b3)) );
   ]]></source>
  +
  +  <p>
  +  There are a lot more examples of how to use the Criteria class in the <a href 
="./criteria-howto.html">Criteria Howto</a>.
  +  </p>
     
     </section>
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to