如何在两列上指定OrderBy子句

Sam*_*Sam 7 hibernate seam jpa

我们想在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");
}
Run Code Online (Sandbox Code Playgroud)

She*_*ari 13

是的,您可以@OrderBy用来订购您的查询.

@OrderBy("startTimeHrs, startTimeMins")
@OneToMany(...)
getBobjects() {
   return bobjects;
}
Run Code Online (Sandbox Code Playgroud)

现在每当你说A.getBobjects()他们将被订购.但是,如果您使用EntityQuery方法检索结果,则可以覆盖getEjbql()并按顺序放置顺序.

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

或者你可以@OverridegetResultList()那里操纵集合在你entityLists


Pas*_*ent 11

如果您正在讨论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 "";
}
Run Code Online (Sandbox Code Playgroud)

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

orderby_list::= orderby_item [,orderby_item]*
orderby_item::= property_or_field_name [ASC | DESC]
Run Code Online (Sandbox Code Playgroud)

如果ASC或未DESC指定, ASC则假定(升序).

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

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