36

注文された子オブジェクト (ここでは cat-kitten の例) のコレクションが必要です。そして、新しい要素を追加する際の順序を守ってください。

@Entity 
public class Cat {
  @OneToMany(mappedBy = "cat", cascade = CascadeType.ALL)
  @OrderBy("name ASC")
  private List<Kitten> kittens;

  public void setKittens(List<Kitten> kittens) { this.kittens = kittens; }
  public List<Kitten> getKittens() { return kittens; } 
}

私がcat.getKittens.add(newKitten)名前で注文すると壊れます。

コレクションを常に順序付けたままにする作業を休止状態にさせることは可能ですか? @Sort hibernateアノテーションを使用して?
@Sort には、 Comparable インターフェイスの実装を強制するという欠点があります...それを行うための正しい「純粋なJPA」の方法は何でしょうか? すべてをDBに保存してリロードしますか? @OrderBy と @Sort を組み合わせることに意味がありますか?

これまでの更新 ソリューションは、@OrderBy と @Sort を組み合わせることです。@OrderBy はORDER BY、生成された SQL でパフォーマンスが向上する句につながります (ソートされたコンテナーに挿入するときに Java が再び「ソート」していると仮定しますが、要素は既にソートされているため、はるかに高速になるはずです)実装されComparableたインターフェースは、常にソートされたコンテナーにつながります。SortedSetの代わりにnow を使用していることに注意してくださいList。ここで更新されたコード:

@Entity 
public class Cat {
  @OneToMany(mappedBy = "cat", cascade = CascadeType.ALL)
  @OrderBy("name ASC")
  @Sort(type = SortType.NATURAL)
  private SortedSet<Kitten> kittens;

  public void setKittens(SortedSet<Kitten> kittens) { this.kittens = kittens; }
  public SortedSet<Kitten> getKittens() { return kittens; } 
}
4

2 に答える 2