Hibernate管理@ManyToMany表插入和命令

时间:2016-08-23 14:53:04

标签: java oracle hibernate arraylist many-to-many

我在两个表之间有双向的@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。

1 个答案:

答案 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<>();