开发者

Sort hibernate collection when retrieving from database

I have an object Foo with a list of Bar. Is there a way I can set up my class so that getBars() will return a List that has been sorted with Collections.sort? In other words, I would like to run Collections.sort when the list is first populated. Presently, I call sort when I retrieve the collection, which may be redundant and 开发者_如何学Gois easily forgotten.


Are you using J2EE-style mappings with Hibernate XML files, or are you using JPA-annotated JavaBeans?

If you're using JPA, you can use the @OrderBy annotation to let the database sort the collection for you. You could also use @Sort to do it on the Java side.

Last, if you're writing HQL - say, in a @NamedQuery - you can use the ORDER BY clause.

Lots of ways to do it!


I think if you annotate the property with @Sort it gets sorted automatically

You've also got the option to specify a custom Comparator class:

@Sort(comparator=MyComparator.class, type=SortType.COMPARATOR)

Reference:

  • @Sort javadocs
  • Hibernate Reference: Sorted Collections


check out the hibernate docs on sorted collections

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/collections.html#collections-sorted.

You can also put another method in your DAO that uses hql to fetch the children, which you can sort via hql.

If the sorting procedure is not based off a single column, I don't think you have any choice but to do the sort yourself. You can add the logic to your domain model...


If you are using XML configuration, you can set order-by attribute:-

<class name="Foo" table="Foo">
    ...

    <set name="bars" inverse="true" order-by="barName">
        <key column="fooId" />
        <one-to-many class="Bar" />
    </set>
</class>

This way, when you invoke foo.getBars(), you will get Bar objects ordered by bar name, in this example.


Sorting the list when you select from the DB would be a better (let db sort it) choice instead of sorting it after selecting.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜