[英]How to dynamically order many-to-many relationship with JPA or HQL?
我有這樣的映射:
@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>();
我可以很好地獲取目錄的產品,但我不能(動態)訂購產品。 我怎么能訂購它們? 我可能不得不用order-by子句寫一個多對多的HQL查詢? 我雖然將orderBy字段名稱字符串傳遞給查詢,還是有更好的解決方案?
表是:products,product_catalog,product_product_catalog(associative table)
PS使用播放! 我的實體的框架JPASupport。
我可以很好地獲取目錄的產品,但我不能(動態)訂購產品。 我怎么能訂購它們?
如果讓JPA檢索關聯,則不可能。 映射是靜態的,使用映射可以做的最好的事情是在“檢索時間”指定順序:
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(升序)。
如果未指定排序元素,則假定按關聯實體的主鍵排序。
屬性或字段名稱必須與關聯類的持久屬性或字段的名稱相對應。 排序中使用的屬性或字段必須對應於支持比較運算符的列。
例:
@Entity public class Course { ... @ManyToMany @OrderBy("lastname ASC") public List<Student> getStudents() {...}; ... }
因此,無論是使用自定義取景器或使用從Java排序列表Comparator
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.