我目前有一个清单
@OneToMany(mappedBy = "movie", orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@OrderBy("date ASC")
private List<MovieReleaseDateEntity> releaseDates = new ArrayList<>();
下载时的实体按日期排序。
但是,如您所知,List
不是最适合JPA的,建议使用Set
。这就是我有不同想法的原因
@OneToMany(mappedBy = "movie", orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private SortedSet<MovieReleaseDateEntity> releaseDates = new TreeSet<>();
并实施Comparable
public int compareTo(MovieReleaseDateEntity o) {
return this.date.compareTo(o.date);
}
哪种方式更好?第一个是List
,第二个是Set
?
答案 0 :(得分:1)
数据库旨在以优化的方式执行order by
命令,同时对order by
中使用的列进行索引。
因此,如果您可以调整表上的索引约束,那么您应该支持数据库的排序。
但是,如您所知,List不是最适合JPA和 建议使用Set。
我宁愿说您不能滥用实体中的List
映射,因为可接受的数量因良好的理由(基数)而受到限制。
您还可以更简单地看到事情:如果您的元素很少,我认为在性能方面使用Set
可能是一种可接受的方式。
否则,使用数据库完成List
的{{1}}可能会受到青睐。
在任何情况下,使用对您的用例来说最合适的结构(order by
或List
),然后在更改设计之前测量实际性能,以期获得更好的性能。
答案 1 :(得分:0)
第一种方法(@OrderBy("date ASC")
)在数据库级别上排序,第二种方法在内存中使用java实现。如果返回的列表大小足够大,那么使用第一种方法会更好。
如果返回的集合相当小并且您需要一些复杂的排序逻辑(但不是按特定字段排序的情况),则使用SortedSet对实现Comparable的实体进行排序可能是合理的。