一尘不染

如何在两列上指定OrderBy子句

hibernate

我们希望对Seam EntityQuery接口和JPA模型中的2列进行排序。我们如何做到这一点?

@Entity
public class A{

@OrderBy(???) // should this be hardcoded here, is it database agnostic
List<B> bobjects;
}

@Entity
public class B {

   public short startTimeHrs;
   public short startTimeMins;
}

@Name("bList")
public class B extends EntityQuery {
        setOrderColumn("startTimeHrs, startTimeMins"); // Is this correct?
        setOrderDirection("asc");
}

阅读 339

收藏
2020-06-20

共1个答案

一尘不染

如果您正在谈论javax.persistence.OrderBy,则此注释会将(目标实体的)逗号分隔属性的列表作为参数,并相应地对集合进行排序。例如,您的情况startTimeHrs asc, startTimeMins asc

根据JPA 1.0规范:

9.1.28 OrderBy批注

OrderBy注释指定的集合的元素的顺序在点值的关联时的关联检索。

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

值排序元素的语法为orderby_list,如下所示:

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

如果未指定ASCDESCASC则假定(升序)。

如果未指定排序元素,则假定按关联实体的主键进行排序。

属性或字段名称必须与关联类的持久属性或字段的名称相对应。排序中使用的属性或字段必须与支持比较运算符的列相对应。

2020-06-20