考虑:
@Entity
public class M {
@ManyToMany
private List<E> es = new ArrayList<E>();
private E newE;
public M(E newE) {
this.newE = newE;
es.add(newE);
}
我不能assert(m.newE == m.getEs(0))
?
我只能在重新启动app / PU之后才能:
public List<E> getEs() {
final int indexOf = es.indexOf(newE);
if (indexOf != 0) {
es.remove(indexOf);
es.add(0, newE);
}
return Collections.unmodifiableList(es);
}
然而,这个繁琐的代码甚至效率低下,因为它强制在实际需要之前从PU加载E权限。有效的替代方案吗?
答案 0 :(得分:0)
我不能
assert(m.newE == m.getEs(0))
?
否,如果@ManyToMany
中有任何对象,newE
将添加到列表的末尾。另外,我相信列表在插入之前会延迟加载,所以你对低效率的关注并不真正适用。
如果你只关心从持久性单元加载元素的顺序,那么@OrderBy就可以了。
@ManyToMany
@Orderby("someproperty ASC")
private List<E> es = new ArrayList<E>();
如果您还想在添加元素时在运行时维护订单,则必须实施compareTo()或单独的Comparator,然后使用Collections.sort(),或使用自然排序的集合比如SortedSet。
答案 1 :(得分:0)