java - Hibernate 管理 @ManyToMany 表插入和订单

标签 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"
        }
    ]
}

然后我调用从数据库中提取数据的服务,并且顺序不同:

{
    "id": 1,
    [
        {
            "id": 1,
            "name": "A"
        },
        {   
            "id": 2,
            "name": "B"
        }
    ]
}

如何管理连接表中的行顺序? 我需要使连接表中的记录顺序与请求的顺序相同:

| 1 | 2 |
| 1 | 1 |

我正在使用 Oracle DB。

最佳答案

您需要添加@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<>();

关于java - Hibernate 管理 @ManyToMany 表插入和订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39104483/

相关文章:

java - 数组的 equal 方法如何工作?

java - SWT- 如何在 Windows 中更改 ProgressBar 颜色?

Oracle - 如何对 View 执行左连接?

java - 使用具有 save(this) 方法的子类扩展 @Entity 注解类

java - 如何防止使用 Hibernate + JPA 执行不需要的更新语句

sql-server - 集成 Spring + Hibernate + Sql 服务器并支持 unicode

java - 从 log4j 1.x 迁移到 log4j2

java - 如何配置嵌入式 jetty 服务器来记录所有请求?

oracle - 如何从dmp文件和日志文件导入Oracle数据库?

java - 超出了获取行数的 GC 开销限制