Ind*_*rek 6 java many-to-many jpa hql sql-order-by
我有这样的映射:
@ManyToMany(cascade = CascadeType.PERSIST)
@JoinTable(
name="product_product_catalog",
joinColumns={@JoinColumn(name="product_catalog", referencedColumnName="product_catalog")},
inverseJoinColumns={@JoinColumn(name="product", referencedColumnName="product")})
public List<Product> products = new ArrayList<Product>();
Run Code Online (Sandbox Code Playgroud)
我可以很好地获取目录的产品,但我不能(动态)订购产品.我怎么能订购它们?我可能不得不用order-by子句写一个多对多的HQL查询?我虽然将orderBy字段名称字符串传递给查询,还是有更好的解决方案?
表是:products,product_catalog,product_product_catalog(associative table)
PS使用播放!我的实体的框架JPASupport.
Pas*_*ent 26
我可以很好地获取目录的产品,但我不能(动态)订购产品.我怎么能订购它们?
如果让JPA检索关联,则不可能.映射是静态的,使用映射可以做的最好的事情是在"检索时间"指定顺序:
9.1.28 OrderBy注释
的
OrderBy注释指定时的关联被检索的集合值关联的在该点的元素的顺序.Run Code Online (Sandbox Code Playgroud)@Target({METHOD, FIELD}) @Retention(RUNTIME) public @interface OrderBy { String value() default ""; }值排序元素的语法是orderby_list,如下所示:
Run Code Online (Sandbox Code Playgroud)orderby_list::= orderby_item [,orderby_item]* orderby_item::= property_or_field_name [ASC | DESC]如果未指定ASC或DESC,则假定ASC(升序).
如果未指定排序元素,则假定按关联实体的主键排序.
属性或字段名称必须与关联类的持久属性或字段的名称相对应.排序中使用的属性或字段必须对应于支持比较运算符的列.
例:
Run Code Online (Sandbox Code Playgroud)@Entity public class Course { ... @ManyToMany @OrderBy("lastname ASC") public List<Student> getStudents() {...}; ... }
因此要么使用自定义查找器,要么使用Java从Java中对列表进行排序Comparator.
| 归档时间: |
|
| 查看次数: |
12747 次 |
| 最近记录: |