2011-10-19 24 views
1

讓被以下機構:的EclipseLink @OrderBy可比

@Entity 
public class Person { 
    @Id 
    long id; 

    @ManyToOne 
    Family fam; 

    @ManyToOne 
    Job job; 
} 

@Entity 
class Family{ 
    @Id 
    long id; 

    @OneToMany(mappedBy="fam") 
    @OrderBy("job") 
    List<Person> p; 
} 


@Entity 
class Job implements Comparable<Job>{ 
    @Id 
    long id; 

    String descr; 

    public int compareTo(Job o) { 
     return descr.compareTo(o.descr); 
    } 
} 

我現在面臨的問題來自於@OrderBy註釋這遠非我所期待的,似乎不支持可比性的實體。

我使用eclipselink 2.3並想知道是否有任何其他設施可以解決這個問題。

問候
喬治

回答

4

@OrderBy使用「按訂單」,在生成的SQL查詢子句使用實體排序。所以,當然,它不是compareTo方法。如果您想使用Java進行排序,那麼只需在getter getPersons()中返回一個排序列表。

+0

感謝您的答案,我想我會使用TreeSet。 –

+1

您將無法使用TreeSet,因爲您需要使用接口而不是具體的類型。 EclipseLink可能支持SortedSet,但我會檢查。 –

+0

你確定嗎?我嘗試使用SotedSet,但它沒有工作,我得到一個類實例化異常。但是,當我使用TreeSet時沒有問題,它只是需要指定獲取類型(我嘗試過)。 –