Hi Oliver,

if I used the p6spy I can see that Hibernate generates a huge sql statement
using joins, and OJB creates many smaller queries without joins.

OJB:
SELECT ID,id_street,FIRSTNAME,birthplace,birthday,NAME,citizenship FROM
PERSON WHERE ID = ? 
SELECT ID,id_ZIPCODE,NAME FROM STREET WHERE ID = ?
SELECT CODE,ID,id_city FROM ZIPCODE WHERE ID = ?
SELECT ID,id_county,NAME FROM CITY WHERE ID = ?
SELECT ID,id_country,code,NAME FROM COUNTY WHERE ID = ?         
SELECT iso3,ID,iso2,NAME FROM COUNTRY WHERE ID = ?                      
SELECT ID,id_county,NAME FROM CITY WHERE ID = ?                 
SELECT ID,id_country,code,NAME FROM COUNTY WHERE ID = ?         
SELECT iso3,ID,iso2,NAME FROM COUNTRY WHERE ID = ?                      
SELECT iso3,ID,iso2,NAME FROM COUNTRY WHERE ID = ?

Hibernate:                      
select city1_.id as id0_, city1_.name as name0_, city1_.id_county as
id_county0_, county2_.id as id1_, county2_.name as name1_, county2_.code as
code1_, county2_.id_country as id_country1_, country3_.id as id2_,
country3_.name as name2_, country3_.iso2 as iso22_, country3_.iso3 as
iso32_, street4_.id as id3_, street4_.name as name3_, street4_.id_zipcode as
id_zipcode3_, zipcode5_.id as id4_, zipcode5_.code as code4_,
zipcode5_.id_city as id_city4_, country6_.id as id5_, country6_.name as
name5_, country6_.iso2 as iso25_, country6_.iso3 as iso35_, person0_.id as
id6_, person0_.name as name6_, person0_.firstName as firstName6_,
person0_.birthday as birthday6_, person0_.birthPlace as birthPlace6_,
person0_.id_street as id_street6_, person0_.citizenship as citizens7_6_,
person0_.name || ' ' || person0_.firstName as f0_6_ from Person person0_,
City city1_, County county2_, Country country3_, Street street4_, Zipcode
zipcode5_, Country country6_ where person0_.id=? and
person0_.birthPlace=city1_.id(+) and city1_.id_county=county2_.id(+) and
county2_.id_country=country3_.id(+) and person0_.id_street=street4_.id(+)
and street4_.id_zipcode=zipcode5_.id(+) and
person0_.citizenship=country6_.id(+)

wow

is this also configurable on OJB?

Maybe it is helpfull to describe a little bit my testing database structure:

- there are countries in COUNTRY table, a country has counties in COUNTY, a
county has cities in CITY, a city has zipcodes in ZIPCODE, a zipcode has
streets in STREET.
- there are 20 milion persons in PERSON table, having a birthplace(foreign
key to CITY), an address (foreign key to STREET), a citizenship (foreign key
to COUNTRY) plus some other details stored in the columns of the PERSON
table

Beeing a rookie in OJB it is possible that my mappings are not the best.

Thanks for your quick feedback.

Regards,

Florin

PS: I have another questions about lazy-loading and mappings. In my Country
class I defined a counties filed which stores the counties in that country.

<class-descriptor class="florinp.Country" table="COUNTRY">
    <field-descriptor name="id" column="ID" jdbc-type="BIGINT"
        primarykey="true" autoincrement="true"/>

    <field-descriptor name="name" column="NAME" jdbc-type="VARCHAR"/>

    <field-descriptor name="iso2" column="iso2" jdbc-type="CHAR"/>

    <field-descriptor name="iso3" column="iso3" jdbc-type="CHAR"/>

    <collection-descriptor name="counties"
element-class-ref="florinp.County" auto-retrieve="false"
        orderby="id" sort="DESC">
        <inverse-foreignkey field-ref="id_country"/>
    </collection-descriptor>

</class-descriptor>

<class-descriptor class="florinp.County" table="COUNTY">
    <field-descriptor name="id" column="ID" jdbc-type="BIGINT"
        primarykey="true" autoincrement="true"/>

    <field-descriptor name="name" column="NAME" jdbc-type="VARCHAR"/>

    <field-descriptor name="code" column="code" jdbc-type="CHAR"/>

    <field-descriptor name="id_country" column="id_country"
jdbc-type="BIGINT"/>

    <reference-descriptor name="country"
        class-ref="florinp.Country">
        <foreignkey field-ref="id_country"/>
    </reference-descriptor>

    <collection-descriptor name="cities" element-class-ref="florinp.City"
auto-retrieve="false"
        orderby="id" sort="DESC">
        <inverse-foreignkey field-ref="id_county"/>
    </collection-descriptor>

</class-descriptor>

1. If I set the attribute auto-retrieve="true" all the loads work slower. If
I set it to "false" then there is a speed up but when I try to access the
Collection of the counties I receive NullPointerException. How do I init the
collection? Is it mandatory to use proxy for County?

2. In the County class, initially I wanted to have no id_country field, the
country field contains also an id; But I was unable to map the country
object without introducing that field. How can I overcome this situation? 

3. Once again thank you for your patience.


-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Sent: Tuesday, November 04, 2003 5:51 PM
To: [EMAIL PROTECTED]
Subject: RE: Loading an object


Hello Florin,

> -----Original Message-----
> From: Florin Pop [mailto:[EMAIL PROTECTED]

> I have tried your suggested approach but curiously the same result.

[..]

I would expect OJB to generate roughly the same
SQL statement.  Provided that the execution of the SQL
dominates (which is questionable as Thomas and Armin
pointed out), I would expect about the same 
performance.

Could you please capture the executed SQL statements
of both tests?  I really would like to see if
they differ.  I cannot imagine what Hibernate
does so much differently.

(Please refer to 
FAQ "How can I trace and/or profile SQL statements executed by OJB?"
in http://db.apache.org/ojb/faq.html.  The instructions
should work for Hibernate, too.)

Olli




---------------------------------------------------------------------
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