You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by Terry Brick <te...@yahoo.com> on 2003/08/28 20:37:32 UTC
Re: Sill need help with references.. anyone???
am I doomed with OJB or is there some help out there?
--- Terry Brick <te...@yahoo.com> wrote:
> Okay, I'll try asking again, only this time there
> are
> more questions probably because I never figured out
> answers for the first ones I posted. It's kind of
> long because I'm trying to be detailed, if anyone
> has
> any clues to any of the questions, that would help
> me
> out a great deal :)
>
> I'm using OJB 1.0rc4, MySQL,
> SequenceManagerNativeImpl
> for the sequence manager and am using
> PersistanceBroker.
>
> #1
> ---
> Whenever I try to store an object that has
> references
> to another class, OJB is requireing that the
> referenced class have an autoincrement field. All I
> do to make it work is set autoincrement="true" and
> it's fine... even though it may NOT be an auto
> incrmement field. SO FAR, this has not been a big
> issue, but I can't help but think it's going to back
> and bite me. I've posted the error message before,
> I
> can go back an retrieve it if someone is interested
> in
> seeing it.
>
> #2
> ---
> This one has been a huge pain for me since I've
> started using OJB. I have a feeling that I'm just
> going about things the wrong way and am not
> understanding key concepts. So here's the story
> (XML
> sample at end)...
> For example, I may have 3 tables/classes defined in
> my
> repository. ClassA has a collection of ClassB's and
> a
> reference to ClassD. So naturally ClassB has a
> reference to ClassA. ClassB also has a reference to
> ClassC (I don't know that this last one is important
> for this discussion, but just trying emulate my
> actualy situation in case it is).
> Now say I have a ClassA instance that I want to
> persist in the database. This ClassA instance also
> has a collection (Vector) of 5 ClassB's. In these 5
> ClassB's, all the properties are populated except
> for
> TableA_ID because that will not be available until
> after this ClassA has been inserted into the
> database
> and the autoincrement id has been retrieved.
> In this ClassA instance I also have a TableD_ID
> property value. So this is where I would typically
> do
> my broker.retrieveAllReferences(obj) call (otherwise
> it sets TableD_ID to null). However, doing this in
> the situation described above nulls out my
> collection!
> So it inserts ClassA fine, but no ClassB's get
> inserted.
> So after several hours of painstaking trial and
> error,
> I finally created a function that recursively loops
> through all properties, collections and references
> and
> ONLY calls retrieveReference() on properties that
> are
> not null. The code is attached below. Does it make
> sense that I'm having to do this or did I go about
> it
> the wrong way??
> Okay, so that gets me one step further... to my next
> problem. So now after running the code on the
> object
> that retrieves references only for those properties
> that are not null, it no longer nulls out my ClassB
> collection and OJB actually tries to insert them.
> However, it's trying to insert the ClassB with null
> TableA_ID values (these need to be populated with
> the
> ID of the newly created ClassA). The only way I've
> been able to get this to work (what I consider a
> temporary workaround) is to REMOVE the reference
> descriptor in ClassB that is pointing to ClassA.
> This
> seems to fix that problem... but I have a feeling
> I'll
> need that ref descriptor back at some point in the
> near future. If none of this makes any sense,
> please
> refer the XML below and I placed a comment in there.
>
> What am I doing wrong? Please help, I'm going crazy
> here.
>
> Thank you!
>
>
> repository.xml example
> ========================
> <class-descriptor class="ClassA" table="TableA">
> <field-descriptor
> name="TableA_ID"
> column="TableA_ID"
> jdbc-type="BIGINT"
> access="readonly"
> primarykey="true"
> autoincrement="true"
> required="true"/>
> <field-descriptor
> name="TableD_ID"
> column="TableD_ID"
> jdbc-type="BIGINT"
> required="true"/>
> <reference-descriptor
> name="TableD_Ref"
> class-ref="ClassD"
> auto-retrieve="false">
> <foreignkey field-ref="TableD_ID"/>
> </reference-descriptor>
> <collection-descriptor
> name="TablesB"
> element-class-ref="ClassB"
> auto-retrieve="false"
> auto-update="true"
> auto-delete="false">
> <inverse-foreignkey field-ref="TableA_ID"/>
> </collection-descriptor>
> </class-descriptor>
>
>
> <class-descriptor class="ClassB" table="TableB">
> <field-descriptor
> name="TableB_ID"
> column="TableB_ID"
> jdbc-type="BIGINT"
> access="readonly"
> primarykey="true"
> autoincrement="true"
> required="true"/>
> <field-descriptor
> name="TableA_ID"
> column="TableA_ID"
> jdbc-type="BIGINT"
> required="true"/>
> <field-descriptor
> name="TableC_ID"
> column="TableC_ID"
> jdbc-type="BIGINT"
> required="true"/>
> <!--
> THINGS ONLY WORK IF I TAKE THIS
> REFERENCE-DESCRIPTOR
> OUT.
> If I don't take it out, then OJB tries to insert
> the
> "TablesB" collection elements
> with null TableA_ID values.
> -->
> <reference-descriptor
> name="TableA_Ref"
> class-ref="ClassA"
> auto-retrieve="false">
> <foreignkey field-ref="TableA_ID"/>
> </reference-descriptor>
> <reference-descriptor
> name="TableC_Ref"
> class-ref="ClassC"
> auto-retrieve="false">
> <foreignkey field-ref="TableC_ID"/>
> </reference-descriptor>
> </class-descriptor>
>
>
> <class-descriptor class="ClassC" table="TableC">
> <field-descriptor
> name="TableC_ID"
> column="TableC_ID"
> jdbc-type="BIGINT"
> access="readonly"
> primarykey="true"
> autoincrement="true"
> required="true"/>
> </class-descriptor>
>
> <class-descriptor class="ClassD" table="TableD">
> <field-descriptor
> name="TableD_ID"
> column="TableD_ID"
> jdbc-type="BIGINT"
> access="readonly"
> primarykey="true"
> autoincrement="true"
> required="true"/>
> </class-descriptor>
>
=== message truncated ===
__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org
Re: Sill need help with references.. anyone???
Posted by Terry Brick <te...@yahoo.com>.
Thanks for the response... You gave me a few things to
look into, I'll post the results and figure out my
email format... i agree it's annoying trying to read
that.
--- Brian McCallister
<mc...@forthillcompany.com> wrote:
> Most of the core developers on OJB are on vacation
> at the moment (it is
> August, and OJB has a largely European set of
> developers).
>
> I will take a stab though (disclaimer, I am just a
> user and part time
> OJB doc writer).
__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org
Re: Sill need help with references.. anyone???
Posted by Brian McCallister <mc...@forthillcompany.com>.
Most of the core developers on OJB are on vacation at the moment (it is
August, and OJB has a largely European set of developers).
I will take a stab though (disclaimer, I am just a user and part time
OJB doc writer).
On Thursday, August 28, 2003, at 02:37 PM, Terry Brick wrote:
>> I'm using OJB 1.0rc4, MySQL,
>> SequenceManagerNativeImpl
>> for the sequence manager and am using
>> PersistanceBroker.
>>
I have never used it with MySQL, uh oh.
>> #1
>> ---
>> Whenever I try to store an object that has
>> references
>> to another class, OJB is requireing that the
>> referenced class have an autoincrement field. All I
This is required for optimistic locking (alternately I believe a date
or timestamp field works for this), but shouldn't be required for all
references without use of optimistic locks. It *does* require a
primary-key field (I believe, am running from memory here and I always
have a primary-key specified anyway) which, as the case may be, is
always auto-incremented. I need to check and verify if auto-increment
is required for any relation, but that doesn't sound right...
>> do to make it work is set autoincrement="true" and
>> it's fine... even though it may NOT be an auto
>> incrmement field. SO FAR, this has not been a big
>> issue, but I can't help but think it's going to back
>> and bite me. I've posted the error message before,
>>
<snip>
It looks like you are using database field names your
reference-descriptors and collection-descriptors. These should be java
object fields, not database fields.
Take a look at the
http://db.apache.org/ojb/howto-use-anonymous-keys.html anonymous key
tutorial (I think the code -> metadata is clearer there) at the
class-descriptors.
Any chance you can post your class code? If not I can whip together a
demo of a working on doing approximately what you ask next week (am
leaving for a short vacation myself tonight). Sorry no one has gotten
back to you more quickly.
-Brian
ps: any way you can turn off the line chopping in your mua? It makes
your mail difficult to read.
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org