arminw      2005/12/19 08:54:52

  Modified:    src/doc/forrest/src/documentation/content/xdocs/docu/guides
                        Tag: OJB_1_0_RELEASE advanced-technique.xml
                        sequencemanager.xml
               src/doc/forrest/src/documentation/content/xdocs Tag:
                        OJB_1_0_RELEASE site.xml
  Log:
  update mapping part 3
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.1.2.10  +125 -127  
db-ojb/src/doc/forrest/src/documentation/content/xdocs/docu/guides/advanced-technique.xml
  
  Index: advanced-technique.xml
  ===================================================================
  RCS file: 
/home/cvs/db-ojb/src/doc/forrest/src/documentation/content/xdocs/docu/guides/advanced-technique.xml,v
  retrieving revision 1.1.2.9
  retrieving revision 1.1.2.10
  diff -u -r1.1.2.9 -r1.1.2.10
  --- advanced-technique.xml    18 Dec 2005 02:14:38 -0000      1.1.2.9
  +++ advanced-technique.xml    19 Dec 2005 16:54:51 -0000      1.1.2.10
  @@ -749,17 +749,17 @@
       </reference-descriptor>
   </class-descriptor>]]></source>
                   <p>
  -                    The mapping for the base class <code>Employee</code> is 
ordinary and we using
  -                    an <a 
href="site:repository/autoincrement"><em>autoincrement</em></a> primary key 
field.
  +                    The mapping for base class <code>Employee</code> is 
ordinary and we using
  +                    a <a 
href="site:repository/autoincrement"><em>autoincrement</em></a> primary key 
field.
                       <br/>
  -                    In the sub-classes <code>Executive</code> and 
<code>Manager</code> it's not allowed
  +                    In the subclasses <code>Executive</code> and 
<code>Manager</code> it's not allowed
                       to use <em>autoincrement</em> primary keys, because OJB 
will automatically copy the
  -                    primary keys of the base class to all sub-classes.
  +                    primary keys of the base class to all subclasses.
                   </p>
                   <p>
                       As you can see this mapping needs a special
                       <a 
href="site:repository/reference-descriptor">reference-descriptor</a>
  -                    in the sub-classes <code>Executive</code> and 
<code>Manager</code> that advises OJB to load
  +                    in the subclasses <code>Executive</code> and 
<code>Manager</code> that advises OJB to load
                       the values for the inherited attributes from the 
super-class by a <em>JOIN</em> using the
                       foreign key reference.
                  <br/>
  @@ -798,151 +798,149 @@
       CONSORTIUM_KEY  INT
   )]]></source>
                   <p>
  -                    Attributes from the base- or super-class or can be used 
the same way as attributes
  -                    of the target class when querying e.g. for 
<code>Manager</code>.
  -                    No <a href="site:query/joins">path-expression</a> is 
needed in this case:
  +                    Attributes from the base- or superclasses can be used 
the same way as attributes
  +                    of the target class when querying - e.g. for 
<code>Executive</code> or <code>Manager</code>.
  +                    No <a href="site:query/joins">path-expression</a> is 
needed in this case. The following
  +                    examples returns all <code>Executive</code> and 
<code>Manager</code> matching the criteria:
                   </p>
                   <source><![CDATA[
   Criteria c = new Criteria();
  +// attribute defined in base class Employee
   c.addEqualTo("name", "Kent");
  +// attribute defined in Executive
   c.addEqualTo("department", "press");
   Query q = QueryFactory.newQuery(Executive.class, c);
  -broker.getCollectionByQuery(q);]]></source>
  -                <p>
  -                    ####### TODO: update docs for 1.0.4 #####
  -                </p>
  -                <p>
  -                    The above example is based on the assumption that the 
primary key attribute
  -                    <code>B.id</code> and its underlying column
  -                    <code>B_TABLE.ID</code>
  -                    is also used as the foreign key attribute.
  -                </p>
  -                <p>
  -                    Now let us consider a case where
  -                    <code>B_TABLE</code> contains an additional
  -                    foreign key column
  -                    <code>B_TABLE.A_ID</code> referencing
  -                    <code>A_TABLE.ID</code>.
  -                    In this case the layout for class
  -                    <code>B</code> could look like follows:
  -                </p>
  -                <source><![CDATA[
  -public class B extends A
  -{
  -    // id is the primary key
  -    int id;
  -
  -    // aID is the foreign key referencing A.id
  -    int aID;
  +// returns all matching Executive and Manager instances
  +Collection result = broker.getCollectionByQuery(q);]]></source>
   
  -    // mapped to a column in B_TABLE
  -    int someValueFromB;
  -}]]></source>
  +                <anchor id="per-subclass-using-fk"/>
  +                <section>
  +                    <title>Table Per Subclass via Foreign Key</title>
                   <p>
  -                    The mapping for
  -                    <code>B</code> will then look like follows:
  -                </p>
  -                <source><![CDATA[
  -<class-descriptor
  -  class="org.apache.ojb.broker.B"
  -  table="B_TABLE"
  ->
  -  <field-descriptor
  -     name="id"
  -     column="ID"
  -     jdbc-type="INTEGER"
  -     primarykey="true"
  -     autoincrement="true"
  -  />
  -
  -  <field-descriptor
  -     name="aID"
  -     column="A_ID"
  -     jdbc-type="INTEGER"
  -  />
  -
  -  <field-descriptor
  -     name="someValueFromB"
  -     column="VALUE_"
  -     jdbc-type="INTEGER"
  -  />
  -
  -  <reference-descriptor name="super"
  -       class-ref="org.apache.ojb.broker.A">
  -     <foreignkey field-ref="aID" />
  -  </reference-descriptor>
  -</class-descriptor>]]></source>
  -                <p>
  -                    The mapping now contains an additional field-descriptor 
for the
  -                    <code>aID</code> attribute.
  +                    The above example is based on the assumption that the
  +                    <a href="site:repository/primary-key">primary key</a> 
attribute
  +                    <code>Employee.id</code> and its underlying column
  +                    <code>EMPLOYEE.ID</code> is also used as the foreign key 
attribute in the
  +                    the subclasses.
                   </p>
                   <p>
  -                    In the
  -                    <code>"super"</code> reference-descriptor the foreignkey
  -                    <code>field-ref</code> attribute
  -                    had to be changed to
  -                    <code>"aID"</code>.
  +                    Now let us consider a case where this is not possible, 
then it's possible
  +                    to use an additional foreign key field/column in the 
subclass referencing
  +                    the base-/superclass.
                   </p>
                   <p>
  -                    It is also possible to have the extra
  -                    foreign key column
  -                    <code>B_TABLE.A_ID</code> but without having a
  -                    foreign key attribute in class
  -                    <code>B</code>:
  -                </p>
  -                <source><![CDATA[
  -public class B extends A
  -{
  -    // id is the primary key
  -    int id;
  -
  -    // mapped to a column in B_TABLE
  -    int someValueFromB;
  -}]]></source>
  -                <p>
  -                    We can use OJB's anonymous field feature to get 
everything working without the
  -                    <code>"aID"</code> attribute. We keep the 
field-descriptor for aID, but declare it as an
  -                    anonymous field.
  +                    In this case the layout for class <code>Executive</code> 
would need an
  +                    additional field <code>employeeFk</code> to store the 
foreign key reference
  +                    to <code>Employee</code>.
  +                    <br/>
  +                    To avoid the additional field in the subclass (if 
desired) we can use OJB's
  +                    <a 
href="site:advanced-technique/anonymous-keys">anonymous field feature</a>
  +                    to get everything working without the 
<code>employeeFk</code> attribute in subclass
  +                    <code>Employee</code> (thus the <a 
href="#classes-inheritance-example">java classes</a> of our
  +                    <a href="#mapping-inheritance-example">mapping 
example</a>). We keep the
  +                    <a 
href="site:repository/field-descriptor">field-descriptor</a> for 
<code>employeeFk</code>,
  +                    but declare it as an <em>anonymous field</em>.
                       We just have to add an attribute
  -                    <code>access="anonymous"</code> to the field-descriptor:
  +                    <code>access="anonymous"</code> to the new 
field-descriptor <code>employeeFk</code>:.
                   </p>
                   <source><![CDATA[
   <class-descriptor
  -  class="org.apache.ojb.broker.B"
  -  table="B_TABLE"
  +    class="Employee"
  +    table="EMPLOYEE"
   >
  -  <field-descriptor
  -     name="id"
  -     column="ID"
  -     jdbc-type="INTEGER"
  -     primarykey="true"
  -     autoincrement="true"
  -  />
  +    <field-descriptor
  +        name="id"
  +        column="ID"
  +        jdbc-type="INTEGER"
  +        primarykey="true"
  +        autoincrement="true"
  +    />
  +    <field-descriptor
  +        name="name"
  +        column="NAME"
  +        jdbc-type="VARCHAR"
  +    />
  +</class-descriptor>
   
  -  <field-descriptor
  -     name="aID"
  -     column="A_ID"
  -     jdbc-type="INTEGER"
  -     access="anonymous"
  -  />
  +<class-descriptor
  +    class="Executive"
  +    table="EXECUTIVE"
  +>
  +    <field-descriptor
  +        name="id"
  +        column="ID"
  +        jdbc-type="INTEGER"
  +        primarykey="true"
  +        autoincrement="true"
  +    />
  +    <field-descriptor
  +        name="department"
  +        column="DEPARTMENT"
  +        jdbc-type="VARCHAR"
  +    />
  +    <field-descriptor
  +        name="employeeFk"
  +        column="EMPLOYEE_FK"
  +        jdbc-type="INTEGER"
  +        access="anonymous"
  +    />
  +    <reference-descriptor name="super"
  +        class-ref="Employee"
  +    >
  +        <foreignkey field-ref="employeeFk"/>
  +    </reference-descriptor>
  +</class-descriptor>
   
  -  <field-descriptor
  -     name="someValueFromB"
  -     column="VALUE_"
  -     jdbc-type="INTEGER"
  -  />
  +<class-descriptor
  +    class="Manager"
  +    table="MANAGER"
  +>
  +    <field-descriptor
  +        name="id"
  +        column="ID"
  +        jdbc-type="INTEGER"
  +        primarykey="true"
  +        autoincrement="true"
  +    />
  +    <field-descriptor
  +        name="consortiumKey"
  +        column="CONSORTIUM_KEY"
  +        jdbc-type="INTEGER"
  +    />
   
  -  <reference-descriptor name="super"
  -       class-ref="org.apache.ojb.broker.A">
  -     <foreignkey field-ref="aID" />
  -  </reference-descriptor>
  +    <field-descriptor
  +        name="executiveFk"
  +        column="EXECUTIVE_FK"
  +        jdbc-type="INTEGER"
  +        access="anonymous"
  +    />
   
  +    <reference-descriptor name="super"
  +        class-ref="Executive"
  +    >
  +        <foreignkey field-ref="executiveFk"/>
  +    </reference-descriptor>
   </class-descriptor>]]></source>
                   <p>
  -                    You can learn more about the anonymous fields feature in 
this
  -                    <a href="site:howto/anonymous-keys">howto</a> and how
  -                    it <a href="#anonymous-keys">work here</a>.
  +                    Now it's possible to use <em>autoincrement</em> primary 
key fields in all classes
  +                    of the hierarchy (because they are decoupled from the 
inheritance references).
  +                    <br/>
  +                    The <em>foreignkey</em>-element have to refer the new 
(anomymous)
  +                    foreign-key field.
                   </p>
  +                    <warning>
  +                        The used primary keys (compound or single) have to 
unique over the mapped class
  +                        hierarchy to avoid object identity conflicts. Else 
it could happen e.g. when
  +                        searching for a <code>Employee</code> with id="42" 
OJB maybe find a
  +                        <code>Employee</code> and a <code>Executive</code> 
object with id="42"!.
  +                        <br/>
  +                        Thus it's problematic to use a
  +                        <a 
href="site:sequence-manager/identity-columns">database idenity columns</a> based
  +                        <a 
href="site:sequence-manager">sequence-manager</a>. In this case it's mandatory 
to use
  +                        a different value scope (start index of identity 
column) for each class in hierarchy
  +                        (e.g. 1 for Employee, 1000000000 for Executive, ...).
  +                    </warning>
  +                    </section>
               </section>
           </section>
   
  
  
  
  1.1.2.10  +3 -3      
db-ojb/src/doc/forrest/src/documentation/content/xdocs/docu/guides/sequencemanager.xml
  
  Index: sequencemanager.xml
  ===================================================================
  RCS file: 
/home/cvs/db-ojb/src/doc/forrest/src/documentation/content/xdocs/docu/guides/sequencemanager.xml,v
  retrieving revision 1.1.2.9
  retrieving revision 1.1.2.10
  diff -u -r1.1.2.9 -r1.1.2.10
  --- sequencemanager.xml       14 Dec 2005 01:19:19 -0000      1.1.2.9
  +++ sequencemanager.xml       19 Dec 2005 16:54:51 -0000      1.1.2.10
  @@ -104,7 +104,7 @@
                   <warning>
                       Force computation of unique values is not allowed when 
using <em>database based
                       Identity columns</em> for primary key generation (e.g via
  -                    <a href="#native">Identity column supporting sequence 
manager</a>), because the
  +                    <a href="#identity-columns">Identity column supporting 
sequence manager</a>), because the
                       <em>real</em> PK value is at the earliest available 
after database insert operation. If you
                       nevertheless force PK computing, OJB will use an 
temporary dummy PK value in the
                       Identity object and this may lead to unexpeted behavior.
  @@ -577,7 +577,7 @@
                   </section>
   
   
  -                <anchor id="native"/>
  +                <anchor id="identity-columns"/>
                   <section>
                       <title>Database Identity-column based sequence 
manager</title>
                       <p>
  
  
  
  No                   revision
  No                   revision
  1.3.2.24  +4 -2      
db-ojb/src/doc/forrest/src/documentation/content/xdocs/site.xml
  
  Index: site.xml
  ===================================================================
  RCS file: 
/home/cvs/db-ojb/src/doc/forrest/src/documentation/content/xdocs/site.xml,v
  retrieving revision 1.3.2.23
  retrieving revision 1.3.2.24
  diff -u -r1.3.2.23 -r1.3.2.24
  --- site.xml  18 Dec 2005 02:14:38 -0000      1.3.2.23
  +++ site.xml  19 Dec 2005 16:54:51 -0000      1.3.2.24
  @@ -201,7 +201,9 @@
                   <turn-off-caching href="#turn-off-caching"/>
                   <oscache href="#oscache"/>
               </object-cache>
  -            <sequence-manager label="Sequence manager" 
href="sequencemanager.html"/>
  +            <sequence-manager label="Sequence manager" 
href="sequencemanager.html">
  +                <identity-columns href="#identity-columns"/>
  +            </sequence-manager>
               <logging label="Logging" href="logging.html"/>
               <lock-manager label="Locking" href="lockmanager.html">
                   <distributed-locking href="#distributed-locking"/>
  
  
  

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

Reply via email to