How do you specify OrderBy clause on two columns

耗尽温柔 提交于 2019-12-04 05:03:25

If you are talking about javax.persistence.OrderBy, this annotation takes into parameter a list of comma separated properties (of the target entity) and order the collection accordingly. For example in your case, startTimeHrs asc, startTimeMins asc.

From the JPA 1.0 specification:

9.1.28 OrderBy Annotation

The OrderBy annotation specifies the ordering of the elements of a collection valued association at the point when the association is retrieved.

@Target({METHOD, FIELD}) @Retention(RUNTIME)
public @interface OrderBy {
String value() default "";
}

The syntax of the value ordering element is an orderby_list, as follows:

orderby_list::= orderby_item [,orderby_item]*
orderby_item::= property_or_field_name [ASC | DESC]

If ASC or DESC is not specified, ASC (ascending order) is assumed.

If the ordering element is not specified, ordering by the primary key of the associated entity is assumed.

The property or field name must correspond to that of a persistent property or field of the associated class. The properties or fields used in the ordering must correspond to columns for which comparison operators are supported.

Yes you can use @OrderBy to order your queries.

@OrderBy("startTimeHrs, startTimeMins")
@OneToMany(...)
getBobjects() {
   return bobjects;
}

Now whenever you are saying A.getBobjects() they will be ordered. However, if you are using the EntityQuery way of retrieving the result you can override the getEjbql() and put the order by there.

@Name("bList")
public class B extends EntityQuery {
    @Override
    public String getEjbql() {
          return "select b from B b order by startTimeHrs, startTimeMins";
    }
}

Or you can @Override the getResultList() to manipulate the collection there in your entityLists

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!