[hibernate-users] Newbie Performance Questions

Eric Kolotyluk eric.kolotyluk at gmail.com
Sun Aug 14 23:44:37 EDT 2011


I'm not sure, I' just using whatever the defaults are.

The more I think of it the more I think the problem is that I am doing 
my iterations procedurally in Java, rather than declaratively in HQL. 
While I can use the following SQL query to get my results, I cannot 
figure out the corresponding HQL query.

SELECT
  "Color"."name",
   "RepresentationLAB".coordinates_l,
   "RepresentationLAB".coordinates_b,
   "RepresentationLAB".coordinates_a
FROM
   "ColorRepository"."Library",
   "ColorRepository"."Library_Color",
   "ColorRepository"."Color",
   "ColorRepository"."Color_Representation",
   "ColorRepository"."RepresentationLAB"
WHERE
    "RepresentationLAB"."id" = "Color_Representation"."rightID" and
    "Color_Representation"."leftID" = "Color"."id" and
    "Color"."id" = "Library_Color"."rightID" and
    "Library_Color"."leftID" = "Library"."id" and
    "Library"."name" = 'PANTONE Goe coated'

The HQL query I am trying follows, but when I run it nothing is returned

                         String hql = "SELECT new  
com.kodak.vip.color.repository.SpotColor("
                                 + "colors.name, "
                                 + "representationLAB.coordinates.l, "
                                 + "representationLAB.coordinates.a, "
                                 + "representationLAB.coordinates.b) "
                                 + "FROM "
                                 + "Library as library join 
library.colors as colors, "
                                 + "Color as color join 
color.representations as representations, "
                                 + "RepresentationLAB as representationLAB "
                                 + "WHERE "
                                 + "representationLAB.id = 
representations.id and "
                                 + "representations.id = color.id and "
                                 + "color.id = colors.id and "
                                 + "colors.id = library.id and "
                                 + "library.name = '" + getName() + "'";

                         Query query = 
hibernate.getCurrentSession().createQuery(hql);
                         return query.list();

Which generates the following SQL

Hibernate:
     select
         color2_."name" as col_0_0_,
         representa6_."coordinates_l" as col_1_0_,
         representa6_."coordinates_a" as col_2_0_,
         representa6_."coordinates_b" as col_3_0_
     from
         "ColorRepository"."Library" library0_
     inner join
         "ColorRepository"."Library_Color" colors1_
             on library0_."id"=colors1_."leftID"
     inner join
         "ColorRepository"."Color" color2_
             on colors1_."rightID"=color2_."id" cross
     join
         "ColorRepository"."Color" color3_
     inner join
         "ColorRepository"."Color_Representation" representa4_
             on color3_."id"=representa4_."leftID"
     inner join
         "ColorRepository"."Representation" representa5_
             on representa4_."rightID"=representa5_."id" cross
     join
         "ColorRepository"."RepresentationLAB" representa6_
     inner join
         "ColorRepository"."Representation" representa6_1_
             on representa6_.id=representa6_1_."id"
     where
         representa6_.id=representa5_."id"
         and representa5_."id"=color3_."id"
         and color3_."id"=color2_."id"
         and color2_."id"=library0_."id"
         and library0_."name"='PANTONE Goe coated'

Cheers, Eric

On 2011-08-14 5:00 PM, Haswell, Joe wrote:
>
> Are the Library's colors lazily loaded?  You could be encountering an 
> N+1 selects issue.
>
> *From:*hibernate-users-bounces at lists.jboss.org 
> [mailto:hibernate-users-bounces at lists.jboss.org] *On Behalf Of *Eric 
> Kolotyluk
> *Sent:* Sunday, August 14, 2011 5:11 PM
> *To:* hibernate-users at lists.jboss.org
> *Subject:* [hibernate-users] Newbie Performance Questions
>
> I have been using Hibernate since January 2011, but more recently I am 
> integrating things into some UI. For some context I have an 
> application that deals with libraries of colors.
>
> Our current application stores the libraries in XML files under Castor 
> on the local file system. A given library has 2,000 colors in it and 
> takes maybe 200 ms to load.
>
> My JPA framework looks something like
>
> @Entity Library - m2m - @Entity Color - m2m - @Entity Representation 
> (i.e. L*a*b*)
>
> In my application, loading from a PostgreSQL database via Hibernate 
> the same data takes
>
>  1. 20 seconds to load with full logging enabled
>  2. 16 seconds to load with logging disabled
>  3. 4 seconds to reload a second time (probably due the default
>     caching behavior)
>  4. 0.2 seconds from via SQL from PostgreSQL
>  5. 0.2 seconds to load from Castor
>  6. 0 seconds (usually) if I use SoftReferences to cache the data in
>     memory
>
> Some of my questions are:
>
>  1. Is the performance I am seeing typical? Is it what most people
>     would agree to expect from using Hibernate with a DBMS like
>     PostgreSQL?
>  2. When logging is turned on, I see what looks like an obscene amount
>     of SQL produced for only 2,000 colors. When logging is turned off,
>     16 seconds still seems like an awfully long time to load 2,000
>     color representations, where running an SQL query to extract the
>     same data takes 203 ms.
>  3. What exactly is taking so long? Using Hibernate I basically load
>     the library object, then iterate over all the colors it has, then
>     for each color object I get the representation object and load the
>     L*a*b* data into the UI.
>  4. Am I making some lame newbie mistake somewhere, and what would
>     that mistake be?
>  5. Should I be formulating an appropriate HQL statement, similar to
>     my SQL statement, and loading things that way?
>  6. Is there some documentation on using Hibernate with Graphical User
>     Interfaces, or some best practices documentation somewhere?
>
> Cheers, Eric
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/hibernate-users/attachments/20110814/09c9698a/attachment.html 


More information about the hibernate-users mailing list