db-ojb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jakob Braeuchi <jbraeu...@gmx.ch>
Subject Re: PersistenceBrokerImpl#storeToDb (assigning reference fk)
Date Wed, 01 Oct 2003 19:03:42 GMT
hi all,

i just commited this patch to the repository.

jakob

Jakob Braeuchi wrote:

> hi all
>
> i changed the sequence of storing an object the way i mentioned in my 
> previous post. and it works
> imo it's the first time PersistenceBrokerImpl is getting smaller ... 
> until we really split it up.
>
> please have a very close look at it and report any problem, because 
> this is one of the critical parts of ojb !
>
> jakob
>
> Jakob Braeuchi wrote:
>
>> hi all,
>>
>> please have a look at method assertFkAssignment. it's based on 
>> christopher worleys patch.
>> this fix runs ok for AnonymousFieldTest  and 
>> BidirectionalAssociationTest.
>>
>> jakob
>>
>> Jakob Braeuchi wrote:
>>
>>> hi all,
>>>
>>> assigning  reference foreign keys  _before_ storing the references  
>>> does not work for the case christopher worley reported. see 'Extent 
>>> problem with multiple classes and tables' in user list.
>>>
>>> the testcase consists of three classes E,F1,G1 (F1 inherits from E, 
>>> G1 from 1F)  where E has an autoincremented pk . F1 and G1 refer to 
>>> the superclass using an anonymous reference descriptor using the pk 
>>> of the class.
>>>
>>> when storing an object of G1 reference F1 and also E are stored 
>>> correctly (F1 with the autoincremented pk from E) but  inserting G1 
>>> fails, because the key is not set. see testcases _fails_... in class 
>>> AnonymousFieldsTest.
>>>
>>> i could solve the problem (well, it's not the first time i think 
>>> it's solved) by adding the following  line in 
>>> PersistenceBrokerImpl#storeToDb:
>>>
>>> ....
>>>        // 2. store references (1:1) associations to avoid FK violations
>>>        storeReferences(obj, cld.getObjectReferenceDescriptors());
>>>       >>        // BRJ: some foreign key values are only known after 
>>> store
>>> >>        assignReferenceFKs(obj, cld.getObjectReferenceDescriptors());
>>>
>>>        // setreferenceFKs for auto_inc dbs - this can be ignored by 
>>> hi low or any that do pre assignment
>>>        try
>>> ....
>>>
>>> the testcases pass without any big problems, but i'm not sure about 
>>> possible side effects. why do we assignReferenceFK before storing ?
>>>
>>> <class-descriptor
>>>        class="org.apache.ojb.broker.ObjectRepository$E"
>>>        table="TABLE_E">
>>>
>>>        <field-descriptor
>>>            name="id"
>>>            column="ID"
>>>            jdbc-type="INTEGER"
>>>            primarykey="true"
>>>            autoincrement="true"
>>>        />
>>>
>>>        <field-descriptor
>>>            name="someSuperValue"
>>>            column="SOMESUPERVALUE"
>>>            jdbc-type="INTEGER"
>>>        />
>>> </class-descriptor>
>>>
>>> <class-descriptor
>>>        class="org.apache.ojb.broker.ObjectRepository$F1"
>>>        table="TABLE_F1">
>>>
>>>        <field-descriptor
>>>            name="id"
>>>            column="ID"
>>>            jdbc-type="INTEGER"
>>>            primarykey="true"
>>>        />
>>>
>>>        <field-descriptor
>>>            name="someValue"
>>>            column="SOMEVALUE"
>>>            jdbc-type="INTEGER"
>>>        />
>>>
>>>          <reference-descriptor name="super"
>>>              class-ref="org.apache.ojb.broker.ObjectRepository$E"
>>>             auto-retrieve="true"
>>>             auto-update="true"
>>>             auto-delete="true">
>>>            <foreignkey field-ref="id" />
>>>          </reference-descriptor>
>>>    </class-descriptor>
>>>
>>>
>>>    <class-descriptor
>>>        class="org.apache.ojb.broker.ObjectRepository$G1"
>>>        table="TABLE_G1">
>>>
>>>        <field-descriptor
>>>            name="id"
>>>            column="ID"
>>>            jdbc-type="INTEGER"
>>>            primarykey="true"
>>>        />
>>>
>>>        <field-descriptor
>>>            name="someSubValue"
>>>            column="SOMESUBVALUE"
>>>            jdbc-type="INTEGER"
>>>        />
>>>
>>>          <reference-descriptor name="super"
>>>              class-ref="org.apache.ojb.broker.ObjectRepository$F1"
>>>             auto-retrieve="true"
>>>             auto-update="true"
>>>             auto-delete="true">
>>>            <foreignkey field-ref="id" />
>>>          </reference-descriptor>
>>>    </class-descriptor>
>>>
>>>
>>> jakob
>>>
>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
>>> For additional commands, e-mail: ojb-dev-help@db.apache.org
>>>
>>>
>> ------------------------------------------------------------------------
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
>> For additional commands, e-mail: ojb-dev-help@db.apache.org
>>
>------------------------------------------------------------------------
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
>For additional commands, e-mail: ojb-dev-help@db.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org


Mime
View raw message