我想要一组有序的子对象(这里是 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)
,按名称排序将被破坏。
是否可以让hibernate做保持集合始终有序的工作?通过使用@Sort hibernate注释?
@Sort 的缺点是它迫使您实现 Comparable 接口……正确的“纯 JPA”方法是什么?将所有内容保存到数据库并重新加载?将@OrderBy 和@Sort 结合起来有意义吗?
到目前为止的更新
解决方案是结合@OrderBy 和@Sort。@OrderBy 导致ORDER BY
生成的 SQL 中的一个子句对性能更好(我假设 java 在插入排序容器时再次“排序”,但这应该更快,因为元素已经排序)@Sort 和一个实现Comparable
的接口导致一个始终排序的容器。请注意,我使用 nowSortedSet
而不是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; }
}