Win a copy of The Java Performance Companion this week in the Performance forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Hibernate Collections and Ordering

 
lavnish lalchandani
Ranch Hand
Posts: 79
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi
I am a little confused on Collections , Ordering and Hibernate
Consider scenario we have a Student class and Book class, and Student has an ordered collection of Books

Now we can have following scenarios

store an ORDERED collection from java to DB table
  • - if order in java is b1,b2,b3 then the entries in DB will be in the same order ( rownum wise ) on doing session.save(student) , right ?
  • - if order in java is b3,b2,b1 then the entries in DB will be in the same order ( rownum wise ) on doing session.save(student) , right ?

  • this will happen irrespective of value for sort="xyz"

    GET rows from DB to Java ORDERED Collection using "in memory sorting"
  • - Now here requirement is irrespective of the order of rows in DB we want a particular ordered collection in java memory we implement comparable or comparator accordingly
  • - so if <set ... sort="natural"/> in and in Book class we implement required logic in CompareTo
  • - if <set ... sort="Comparator"/> here order will be as per the logic implemented in the comparator class
  • - if <set ... sort="unsorted"> then whatever be default order in DB will come in Java collection


  • GET rows from DB to Java ORDERED Collection using "SQL sorting"
  • here the <set ... sort="unsorted"> does not play any role


  • Just wanted to check if my understanding is correct
     
    Bill Gorder
    Bartender
    Posts: 1682
    7
    Android IntelliJ IDE Linux Mac OS X Spring
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator
    store an ORDERED collection from java to DB table
    - if order in java is b1,b2,b3 then the entries in DB will be in the same order ( rownum wise ) on doing session.save(student) , right ?
    - if order in java is b3,b2,b1 then the entries in DB will be in the same order ( rownum wise ) on doing session.save(student) , right ?


    First of all the words sorted and ordered mean 2 different things when we are talking about Hibernate persistent collections. Sorted means sorted in memory using a Java comparator, while ordered is done at the database level using an SQL query with an order by clause. In this case I think you meant store a SORTED collection.

    Different collection types are wrapped by different hibernate implementations. For example for a List with no ordered annotations a bag implementation will be used and order will be ignored. Also depending on your id generation strategy the consecutive rownum assumption may be faulty as well.

    Have a look at this link
    http://docs.jboss.org/hibernate/orm/4.0/manual/en-US/html/collections.html#collections-indexed

     
    lavnish lalchandani
    Ranch Hand
    Posts: 79
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator
    Sorted means sorted in memory using a Java comparator, while ordered is done at the database level using an SQL query with an order by clause.

    if user decides to use rownum for both sorting in memory and ordering in the DB i guess only then they both can be same else not , right ??
     
    • Post Reply
    • Bookmark Topic Watch Topic
    • New Topic