簡體   English   中英

如何使用JPA或HQL動態訂購多對多關系?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM