我们希望对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"); }
如果您正在谈论javax.persistence.OrderBy,则此注释会将(目标实体的)逗号分隔属性的列表作为参数,并相应地对集合进行排序。例如,您的情况startTimeHrs asc, startTimeMins asc。
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] 如果未指定ASC或DESC, ASC则假定(升序)。 如果未指定排序元素,则假定按关联实体的主键进行排序。 属性或字段名称必须与关联类的持久属性或字段的名称相对应。排序中使用的属性或字段必须与支持比较运算符的列相对应。
的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]
如果未指定ASC或DESC, ASC则假定(升序)。
ASC
DESC
如果未指定排序元素,则假定按关联实体的主键进行排序。
属性或字段名称必须与关联类的持久属性或字段的名称相对应。排序中使用的属性或字段必须与支持比较运算符的列相对应。