我在两个表之间有双向的@ManyToMany关系:
@Table(name = "USERS")
public class User extends AbstractEntity {
@ManyToMany
@JoinTable(name = "USERS_GROUPS",
joinColumns = {@JoinColumn(name = "USER_ID")},
inverseJoinColumns = {@JoinColumn(name = "GROUP_ID")})
private List<Group> groups = new ArrayList<>();
}
@Entity
@Table(name = "GROUPS")
public class Group extends AbstractEntity {
@JsonIgnore
@ManyToMany(mappedBy = "groups")
private List<User> users = new ArrayList<>();
}
当我更新用户时:
public User linkToGroup(User user) {
User userPersistent;
Group groupPersistent;
// ....
for (Group group : user.getGroups()) {
groupPersistent = groupService.findById(group.getId());
groupPersistent.getUsers().add(user);
// Update with index for proper JSON response
user.getGroups().set(user.getGroups().indexOf(groupPersistent), groupPersistent);
userPersistent.getGroups().add(group);
}
return userRepository.save(userPersistent);
}
当我查看相应的连接表时,插入的行没有任何顺序。
所以,当我在其中发送用户正文和群组列表时:
{
[
{
"id": 2,
"name": "B"
},
{
"id": 1,
"name": "A"
}
]
}
然后我正在调用从DB中提取数据的服务,顺序不一样:
{
"id": 1,
[
{
"id": 1,
"name": "A"
},
{
"id": 2,
"name": "B"
}
]
}
如何管理连接表中的行顺序? 我需要将连接表中的记录顺序与请求的顺序相同:
| 1 | 2 |
| 1 | 1 |
我正在使用Oracle DB。
答案 0 :(得分:1)
您需要添加@OrderBy
注释:
@ManyToMany
@JoinTable(name = "USERS_GROUPS",
joinColumns = {@JoinColumn(name = "USER_ID")},
inverseJoinColumns = {@JoinColumn(name = "GROUP_ID")})
@OrderBy("id ASC") //example
private List<Group> groups = new ArrayList<>();