2017-08-30 11 views
0

おはようございます。JPA @OrderByは@ElementCollectionで動作しません

Aには@ElementCollectionがセットされた単純なエンティティがあります。 DBテーブルのスキーム - それゆえ: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")を作業しないでください - なぜ>?それはDBへのSQL要求中に実装する必要があります。 (公式ドキュメントにもSetと同様の例があります)

ありがとうございます。

+0

「OrderBy」は、要素のフィールドによって要素を順序付けすることです。最初に、Setから、そのSet以降の順序付けはなく、次に要素にはフィールドがありません! "Integer"は "ModelYear"フィールドを持っていますか?いいえ。 –

+0

@Neil Stockton [OK]、// ElementCollectionの// OrderByは//埋め込み可能な型だけで動作するのでしょうか?そして、もし我々がワンドソートであれば、セットのTreeSet の実装を使用することは容認できますか?> – Nolik

+0

'OrderBy'は' ElementCollection'を使用するときに埋め込み可能であることにのみ注意してください。 TreeSetは、セットがインスタンス化されるときにJPAプロバイダがコンパレータの設定をサポートする限り、一方向です。 –

答えて

0

このトピックの回答は、@Neil Stocktonのコメントを参照してください。 さらに、作業中のhibernateがコレクションを独自の型(PersistentSet、または@Sortマーク付きSortedPersistentSet)に変換するため、コレクションに@Sortアノテーションをマークすることを忘れないでください。

関連する問題