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 jo...@fws.gov on 2005/08/02 16:00:21 UTC
RE: orderby column in indirection-table
Sorry for the late reply Andrew. I haven't yet tested this, but I'll try
it and report back to the list.
best,
Jon French
Programmer
ECOS Development Team
jon_french@fws.gov
970-226-9290
"Clute, Andrew" <An...@etech.ohio.gov>
07/28/2005 02:14 PM
Please respond to
"OJB Users List" <oj...@db.apache.org>
To
"OJB Users List" <oj...@db.apache.org>
cc
Subject
RE: orderby column in indirection-table
FYI...There is a bug with MtoNCollectionsPrefetcher that caused certain
collections indirect MtoN collections to ignore the order-by clauses.
I committed a patch for that about 2 months ago, you might want to build
the latest of the 1_0 release line and see if that fixes your issue.
-Andrew
> -----Original Message-----
> From: jon_french@fws.gov [mailto:jon_french@fws.gov]
> Sent: Wednesday, July 27, 2005 4:01 PM
> To: OJB Users List
> Subject: Re: orderby column in indirection-table
>
> Hi Armin:
>
> Your suggestion is basically what I started with except for
> using the <orderby> element instead of attribute. It still
> doesn't work. The Collection is not ordered and no "order by"
> statement is generated (this is using 1.0.3) in the log
> output from SqlGeneratorDefaultImpl.
>
> Here is my actual collection descriptor:
>
> <collection-descriptor
> name="categories"
>
> collection-class="org.apache.ojb.broker.util.collections.Manag
> eableArrayList"
> element-class-ref="gov.doi.fis.dataobjects.WorkMeasureCategory"
> indirection-table="CATEGORY_SOURCE_CROSS"
> auto-update="none"
> auto-delete="none"
> proxy="false">
> <orderby name="CATEGORY_SOURCE_CROSS.CATEGORY_ORDER" sort="ASC"/>
> <fk-pointing-to-this-class column="SOURCE_ID" />
> <fk-pointing-to-element-class column="CATEGORY_ID" />
> </collection-descriptor>
>
> The DDL for CATEGORY_SOURCE_CROSS is:
>
> CREATE TABLE FIS.CATEGORY_SOURCE_CROSS
> (
> SOURCE_ID NUMBER (8)
> NOT
> NULL
> , CATEGORY_ID NUMBER (8)
> NOT
> NULL
> , CATEGORY_ORDER NUMBER (4)
> NOT
> NULL
> , PRIMARY KEY (SOURCE_ID,CATEGORY_ID)
> , UNIQUE (SOURCE_ID,CATEGORY_ORDER)
> , FOREIGN KEY (CATEGORY_ID) REFERENCES
> WORK_MEASURE_CATEGORY(CATEGORY_ID)
> , FOREIGN KEY (SOURCE_ID) REFERENCES
> WORK_MEASURE_SOURCE(SOURCE_ID) );
>
> Thanks,
>
> Jon French
> Programmer
> ECOS Development Team
> jon_french@fws.gov
> 970-226-9290
>
>
>
> Armin Waibel <ar...@apache.org>
> 07/26/2005 04:47 PM
> Please respond to
> "OJB Users List" <oj...@db.apache.org>
>
>
> To
>
> OJB Users List <oj...@db.apache.org>
> cc
>
>
>
>
>
> Subject
> Re: orderby column in indirection-table
>
>
>
>
>
>
> Hi Jon,
>
> isn't it possible to do something like this:
>
> <collection-descriptor name="authors"
> collection-class="org.apache.ojb.broker.util.collections.Manag
> eableArrayList"
> element-class-ref="package.name.Author"
> indirection-table="BOOK_AUTHOR_CROSS"
> auto-update="none"
> auto-delete="none"
> proxy="true">
>
> <orderby name="BOOK_AUTHOR_CROSS.AUTHOR_ORDER" sort="ASC"/>
>
> <fk-pointing-to-this-class column="BOOK_ID" />
> <fk-pointing-to-element-class column="AUTHOR_ID" />
> </collection-descriptor>
>
> this should add an order by using the unchanged cloumn name (Don't
> forget to remove the "old" orderby attribute).
>
> regards,
> Armin
>
> jon_french@fws.gov wrote:
> > Thanks for your reply Armin:
> >
> > In the test-case you gave me, the values of both <orderby> "name"
> > attributes ("name" and "MOVIE_ID_INT") are valid identifiers for
> > <field-descriptor> on the M2NTest$Actor class. The first is
> a property
> > name of the object and the second is a table column of a property.
> >
> > This case is a bit different than what I need because the
> column for
> which
> > I would like to orderby is on the indirection-table, not on the
> > element-class table.
> >
> > Your statement that my indirection table isn't a "pure" indirection
> table
> > is true. I'm definitely stretching the definition by adding an
> additional
> > attribute. I would still like to avoid mapping a
> class-descriptor for
> the
> > m:n association if possible.
> >
> > Right now, I have to use release 1.0.3 and moving the
> orderby attribute
> to
> > an <orderby> element didn't change the generated sql.
> >
> >
> >>>How is the AUTHOR_ORDER column populated?
> >
> >
> > In my case, the m:n association is relatively static and will be
> populated
> > by hand external to OJB. I'll never have a need to add an
> AUTHOR to a
> BOOK
> > and thus don't need to worry about insertions into the
> indirection-table.
> >
> > I'll look into the 1.0.3 source code further.
> >
> > Best,
> >
> > Jon French
> > Programmer
> > ECOS Development Team
> > jon_french@fws.gov
> > 970-226-9290
> >
> >
> >
> > Armin Waibel <ar...@apache.org>
> > 07/26/2005 12:32 PM
> > Please respond to
> > "OJB Users List" <oj...@db.apache.org>
> >
> >
> > To
> >
> > OJB Users List <oj...@db.apache.org>
> > cc
> >
> >
> >
> >
> >
> > Subject
> > Re: orderby column in indirection-table
> >
> >
> >
> >
> >
> >
> > Hi Jon,
> >
> > In your case the indirection table isn't a real indirection table,
> > because you store additional information in column
> AUTHOR_ORDER. How is
> > the AUTHOR_ORDER column populated?
> > Think OJB will ignore this column when handling the m:n
> relation between
>
> > Book and Author - or I'm wrong?
> >
> > Anyway you should use the new 'orderby' element to specify
> the order by
> > fields in your reference, the 'orderby-attribute' is deprecated now.
> >
> > An example:
> >
> > <collection-descriptor name="actors"
> >
> collection-class="org.apache.ojb.broker.util.collections.Manag
> eableArrayList"
> > element-class-ref="org.apache.ojb.broker.M2NTest$Actor"
> > auto-retrieve="false"
> > auto-update="false"
> > auto-delete="false"
> > indirection-table="M2N_TEST_ROLE"
> > >
> > <orderby name="name" sort="ASC"/>
> > <orderby name="MOVIE_ID_INT" sort="DESC"/>
> >
> >
> > <fk-pointing-to-this-class column="MOVIE_ID_INT"/>
> > <fk-pointing-to-this-class column="MOVIE_ID2_INT"/>
> > <fk-pointing-to-this-class column="MOVIE_ID_STR"/>
> > <fk-pointing-to-element-class column="ACTOR_ID"/>
> > <fk-pointing-to-element-class column="ACTOR_ID2"/>
> > </collection-descriptor>
> >
> > The first orderby point to the 'name' field in Movie class.
> The second
> > one use the column name of a column in indirection table.
> If OJB doesn't
>
> > find a field name it use the specified String unchanged
> (MOVIE_ID_INT).
> > The generated sql look like this:
> >
> > SELECT A0.OBJ_ID,A0.OBJ_ID2,A0.NAME,MOVIE_ID_INT as ojb_col_4
> > FROM M2N_TEST_ACTOR A0,M2N_TEST_ROLE
> > WHERE ((((M2N_TEST_ROLE.MOVIE_ID_INT = '1')
> > AND M2N_TEST_ROLE.MOVIE_ID2_INT = '2')
> > AND M2N_TEST_ROLE.MOVIE_ID_STR =
> 'doTestAddNewEntries_1122401682890')
> > AND M2N_TEST_ROLE.ACTOR_ID = A0.OBJ_ID)
> > AND M2N_TEST_ROLE.ACTOR_ID2 = A0.OBJ_ID2
> > ORDER BY 4 DESC, 3
> >
> > Use latest OJB from CVS (OJB_1_0_RELEASE branch) to run this test.
> >
> > regards,
> > Armin
> >
> > jon_french@fws.gov wrote:
> >
> >>OJB-users:
> >>
> >>I would like to order a <collection-descriptor> based on
> the value of a
> >>column in an indirection table. For instance, if a BOOK has an m:n
> >>relation to AUTHORS specified via the indirection
> BOOK_AUTHOR_CROSS, and
>
> >
> >
> >>BOOK_AUTHOR_CROSS has columns:
> >>
> >>BOOK_ID,
> >>AUTHOR_ID,
> >>AUTHOR_ORDER
> >>
> >>I would like the Collection of AUTHORS for a given book to
> be ordered by
>
> >
> >
> >>the natural ordering of column AUTHOR_ORDER.
> >>
> >>I've found previous list posts that recommended that I do
> this via the
> >>orderby attribute in the collection-descriptor like this:
> >>
> >> <collection-descriptor
> >> name="authors"
> >>
> >>
> >
> >
> collection-class="org.apache.ojb.broker.util.collections.Manag
> eableArrayList"
> >
> >> element-class-ref="package.name.Author"
> >> indirection-table="BOOK_AUTHOR_CROSS"
> >> auto-update="none"
> >> auto-delete="none"
> >> orderby="BOOK_AUTHOR_CROSS.AUTHOR_ORDER"
> >> proxy="true">
> >> <fk-pointing-to-this-class column="BOOK_ID" />
> >> <fk-pointing-to-element-class column="AUTHOR_ID" />
> >> </collection-descriptor>
> >>
> >>However, the SQL generated (from SQLGeneratorDefaultImpl) for the
> >>Collection look-up does not contain an "order by" clause,
> the collection
>
> >
> >
> >>is definitely not ordered properly, and changing the
> orderby attribute
> >
> > to
> >
> >>a bogus column name does not throw an error (ie.
> >>BOOK_AUTHOR_CROSS.AUTHOR_ORDER_BOGUS) as I would expect it
> to do if it
> >
> > was
> >
> >>being used.
> >>
> >>I understand from the repository.dtd documentation that the orderby
> >>attribute is supposed to reference a <field-descriptor> on the
> >>element-class, but I thought OBJ used to support this
> alternate form of
> >>ordering for non-decomposed mappings.
> >>
> >>Thanks,
> >>
> >>Jon French
> >>Programmer
> >>ECOS Development Team
> >>jon_french@fws.gov
> >>970-226-9290
> >>
> >>
> >>
> >
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> > For additional commands, e-mail: ojb-user-help@db.apache.org
> >
> >
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
>
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org