Brian and Lance, 

Thanks very much! 

----------------------------------------------------------------
Bob Celestino
SAS Research and Development
919 - 531 - 9425
[EMAIL PROTECTED]

SAS - The Power to Know


  > -----Original Message-----
  > From: Brian McCallister [mailto:[EMAIL PROTECTED] 
  > Sent: Thursday, October 30, 2003 9:48 PM
  > To: OJB Users List
  > Subject: Re: o/r mapping question
  > 
  > 
  > Solution 1:
  > Implement AddressGroup as a custom collection (implementing 
  > Manageable  
  > Collection) used to hold the address instances. This 
  > muddies the domain  
  > model a bit as AddressGroup then needs to know about  
  > ManageableCollection.
  > 
  > Solution 2:
  > Map two classes to the same table (I used an existing 
  > application hence  
  > the names of tables):
  > 
  > kim=# \d users
  > \d               Table "public.users"
  >     Column   |          Type          | Modifiers
  > ------------+------------------------+-----------
  >   id         | integer                | not null
  >   handle     | character varying(32)  |
  >   password   | character varying(255) |
  >   first_name | character varying(255) |
  >   last_name  | character varying(255) |
  >   aim_name   | character varying(255) |
  >   email      | character varying(255) |
  > Indexes: users_pkey primary key btree (id)
  > 
  > kim=# \d gifts
  >                   Table "public.gifts"
  >       Column      |          Type           | Modifiers
  > -----------------+-------------------------+-----------
  >   id              | integer                 | not null
  >   name            | character varying(255)  |
  >   description     | character varying(2000) |
  >   level_of_desire | integer                 | default 0
  >   where_to_buy    | character varying(2000) |
  >   cost            | character varying(255)  |
  >   for_user_id     | integer                 | not null
  >   from_user_id    | integer                 |
  >   suggest_user_id | integer                 |
  > Indexes: gifts_pkey primary key btree (id)
  > Foreign Key constraints: gifts_fk_1 FOREIGN KEY (suggest_user_id)  
  > REFERENCES users(id) ON UPDATE NO ACTION ON DELETE NO ACTION,
  >                           gifts_fk_2 FOREIGN KEY (for_user_id)  
  > REFERENCES users(id) ON UPDATE NO ACTION ON DELETE NO ACTION,
  >                           gifts_fk_3 FOREIGN KEY (from_user_id)  
  > REFERENCES users(id) ON UPDATE NO ACTION ON DELETE NO ACTION
  > 
  > kim=#
  > 
  > 
  > <class-descriptor class="org.skife.kim.model.Foo" table="USERS">
  >      <field-descriptor name="id" column="ID" jdbc-type="INTEGER"  
  > primarykey="true" autoincrement="true"/>
  >      <reference-descriptor name="bar"  
  > class-ref="org.skife.kim.model.Bar">
  >          <foreignkey field-ref="id"/>
  >      </reference-descriptor>
  > </class-descriptor>
  > 
  > <class-descriptor class="org.skife.kim.model.Bar" table="USERS">
  >      <field-descriptor name="id" column="ID" jdbc-type="INTEGER"  
  > primarykey="true" autoincrement="true"/>
  >      <collection-descriptor name="gifts"  
  > element-class-ref="org.skife.kim.model.Gift"
  >           
  > collection- 
  > class="org.apache.ojb.broker.util.collections.ManageableHashSet">
  >          <inverse-foreignkey field-ref="for_user_id"/>
  >      </collection-descriptor>
  > </class-descriptor>
  > 
  > <class-descriptor class="org.skife.kim.model.Bang" table="GIFTS">
  >      <field-descriptor name="id" column="ID" jdbc-type="INTEGER"  
  > primarykey="true" autoincrement="true"/>
  >      <field-descriptor name="for_user_id" column="FOR_USER_ID"  
  > jdbc-type="INTEGER" access="anonymous"/>
  >      <reference-descriptor name="bar"  
  > class-ref="org.skife.kim.model.User">
  >          <foreignkey field-ref="for_user_id"/>
  >      </reference-descriptor>
  > </class-descriptor>
  > 
  > 
  > public class Foo
  > {
  >      public Integer id;
  >      public Bar bar;
  > }
  > 
  > public class Bar
  > {
  >      public Integer id;
  >      public Set gifts;
  > }
  > 
  > public class Bang
  > {
  >      public Integer id;
  >      public Bar bar;
  > }
  > 
  >      public void testFooBar() throws Exception
  >      {
  >          foo = new Foo();
  >          bar = new Bar();
  >          bang = new Bang();
  > 
  >          PersistenceBroker broker =  
  > PersistenceBrokerFactory.defaultPersistenceBroker();
  >          foo.bar = bar;
  >          bar.gifts = new HashSet();
  >          bar.gifts.add(bang);
  >          bang.bar = bar;
  >          broker.store(foo);
  >          broker.store(bar);
  >          broker.store(bang);
  >          broker.clearCache();
  > 
  >          Criteria crit = new Criteria();
  >          crit.addEqualTo("id", this.foo.id);
  >          Query query = new QueryByCriteria(Foo.class, crit);
  >          Foo thing = (Foo) broker.getObjectByQuery(query);
  >          Assert.assertEquals(thing.id, foo.id);
  >          Assert.assertEquals(1, foo.bar.gifts.size());
  >      }
  > 
  > .
  > Time: 2.108
  > 
  > OK (1 test)
  > 
  > Neither one is ideal, but the ideal is having the data 
  > model and object  
  > model match up perfectly. The second leaves your object model  
  > independent of your persistence mechanism at least but sort 
  > of feels  
  > dirty to me.
  > 
  > -Brian
  > 
  > On Thursday, October 30, 2003, at 09:14 PM, Robert J 
  > Celestino wrote:
  > 
  > > Hello all,
  > >
  > > I am stumped by what is posibly a very simple mapping problem.
  > >
  > > Consider something like this
  > >   Person is stored in the person table
  > >   Person has-a AddressGroup. AddressGroup is not stored in the DB
  > >   AddressGroup has a list of Addresses
  > >   Address is stored in the address table. Has a column
  > >           called PersonId that indicates the person it belongs to
  > >
  > > This is a little contrived but bear with me.
  > >
  > > Clearly Person could have a list of addresses, but for 
  > various reasons
  > > it has the intermediate class AddressGroup instead.
  > >
  > > I know how to solve this if AddressGroup was stored in 
  > the DB, but it
  > > is not. It is purely a domain class.
  > >
  > > How can I get ojb to create and write this class without actually
  > > writing it to the db?
  > >   
  > > Thanks very much
  > > Bob c
  > >
  > > ----------------------------------------------------------------
  > > Bob Celestino
  > > SAS Research and Development
  > > 919 - 531 - 9425
  > > [EMAIL PROTECTED]
  > >
  > > SAS - The Power to Know
  > >
  > > 
  > ------------------------------------------------------------
  > ---------
  > > To unsubscribe, e-mail: [EMAIL PROTECTED]
  > > For additional commands, e-mail: [EMAIL PROTECTED]
  > >
  > >
  > 

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

Reply via email to