Hibernate 管理@ManyToMany table 插入和订单
Hibernate manage @ManyToMany table insertions and orders
我在两个 table 之间有双向@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);
}
当我查看相应的连接 table 时,插入的行没有任何顺序。
因此,当我发送用户正文和其中的组列表时:
{
[
{
"id": 2,
"name": "B"
},
{
"id": 1,
"name": "A"
}
]
}
然后我调用从数据库中提取数据的服务,但顺序不一样:
{
"id": 1,
[
{
"id": 1,
"name": "A"
},
{
"id": 2,
"name": "B"
}
]
}
如何管理联接 table 中的行顺序?
我需要让 join table 中的记录顺序与请求的顺序相同:
| 1 | 2 |
| 1 | 1 |
我正在使用 Oracle 数据库。
您需要添加@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<>();
我在两个 table 之间有双向@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);
}
当我查看相应的连接 table 时,插入的行没有任何顺序。
因此,当我发送用户正文和其中的组列表时:
{
[
{
"id": 2,
"name": "B"
},
{
"id": 1,
"name": "A"
}
]
}
然后我调用从数据库中提取数据的服务,但顺序不一样:
{
"id": 1,
[
{
"id": 1,
"name": "A"
},
{
"id": 2,
"name": "B"
}
]
}
如何管理联接 table 中的行顺序? 我需要让 join table 中的记录顺序与请求的顺序相同:
| 1 | 2 |
| 1 | 1 |
我正在使用 Oracle 数据库。
您需要添加@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<>();