我们想在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");
}
答案 0 :(得分:13)
是的,您可以使用@OrderBy
订购查询。
@OrderBy("startTimeHrs, startTimeMins")
@OneToMany(...)
getBobjects() {
return bobjects;
}
现在每当你说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";
}
}
或者您可以@Override
getResultList()
来操纵实体列表中的集合
答案 1 :(得分:11)
如果您正在讨论javax.persistence.OrderBy
,则此注释会将参数列入逗号分隔的属性(目标实体的列表),并相应地对集合进行排序。例如,在您的情况下,startTimeHrs asc, startTimeMins asc
。
从JPA 1.0规范:
9.1.28 OrderBy Annotation
OrderBy
注释指定了 排序的元素 收藏价值协会在 关联时的点 检索。@Target({METHOD, FIELD}) @Retention(RUNTIME) public @interface OrderBy { String value() default ""; }
值排序的语法 element是orderby_list,as 如下:
orderby_list::= orderby_item [,orderby_item]* orderby_item::= property_or_field_name [ASC | DESC]
如果未指定
ASC
或DESC
, 假定ASC
(升序)。如果订购元素不是 指定,按主键排序 假设相关实体。
属性或字段名称必须 对应于持久性的 相关的财产或领域 类。使用的属性或字段 在订购必须对应 比较运算符的列 得到支持。