2017-08-30 56 views
0

美好的一天。JPA @OrderBy不在@ElementCollection中工作

A有一個簡單的實體,其中有@ElementCollection Set。 數據庫表的方案 - 因此:enter image description here

@Entity 
@Table(name = "Dealer") 
public class Dealer implements java.io.Serializable{ 
private int id; 
private Set<Integer> modelYears = new LinkedHashSet<Integer>(0); 
... 
    @Id 
    @GeneratedValue 
    @Column(name = "Id", unique = true, nullable = false) 
    @XmlTransient 
    public int getId() { 
     return this.id; 
    } 

    @ElementCollection(fetch = FetchType.LAZY) 
    @CollectionTable(name = "DealerModelYear", joinColumns = @JoinColumn(name = "DealerId")) 
    @Column(name = "ModelYear") 
    @OrderBy("ModelYear ASC") 
    @XmlElementWrapper 
    @XmlElement(name = "modelYear") 
     public Set<Integer> getModelYears() { 
     return this.modelYears; 
    } 

    public void setModelYears(Set<Integer> modelYears) { 
     this.modelYears = modelYears; 
    } 

在這裏,不要工作@OrderBy( 「ModelYear ASC」) - 爲什麼?>它必須在對數據庫的SQL請求期間執行。 (另外在官方文檔中有與Set相似的例子)

提前致謝。

+0

'OrderBy'是通過元素的字段排序元素。首先有一個Set,因爲它是一個Set,所以沒有這個順序,其次這個元素沒有字段! 「Integer」是否有「ModelYear」字段?不。 –

+0

@Neil Stockton好吧,這是否意味着//OrderCha for // ElementCollection只適用於// Embeddable類型?如果我們是魔杖排序可以使用TreeSet 實現Set ?> – Nolik

+0

只有使用'ElementCollection'時,'OrderBy'才具有可嵌入性,是的。 TreeSet是一種方法,只要您的JPA提供程序支持在實例化集合時設置比較器。 –

回答

0

有關此主題的答案,請參閱@Neil Stockton的評論。 另外別忘了用@Sort批註標記你的集合,因爲工作期間的Hibernate將自己類型的集合(PersistentSet或@Sort標記爲SortedPersistentSet)轉換爲集合。