2017-08-30 50 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)转换为集合。