我有一个可以由自身组成的实体:
class Group {
// ...
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinTable(
name = "group_group",
joinColumns = @JoinColumn(name = "id"),
inverseJoinColumns = @JoinColumn(name = "parentgroup_id")
)
@OrderColumn
private List<Group> groups = new ArrayList<Group>();
@ManyToOne
private Group parentGroup;
public List<Group> getGroups() {
return groups;
}
public Group getGroup() {
return parentGroup;
}
}
我可以创建一个组并添加两个子组:
Group parent = new Group();
Group child1 = new Group();
Group child2 = new Group();
parent.getGroups().add(child1);
parent.getGroups().add(child2);
parent = groupRepository.save(parent);
// parent.getGroups().get(0).getId() == child1.getId()
// parent.getGroups().get(1).getId() == child2.getId()
但这似乎是一个巧合。我能够更新订单(例如使用 Collections.sort)并且连接表的行被正确更新。
我如何加载父组无关紧要,子组始终按创建顺序排列。执行的 SQL 查询为:
SELECT t1.ID, t1.PARENTGROUP_ID FROM GROUP t0, GROUP t1 WHERE ((t1.PARENTGROUP_ID = ?) AND (t0.ID = t1.PARENTGROUP_ID))
没有 ORDER BY 似乎是错误的。如何说服 EclipseLink 添加它?