2016-08-23 34 views
1

我有兩個表之間的雙向@ManyToMany關係:休眠管理@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數據庫。

+0

是否使用JPARepository? – ByeBye

+0

我正在使用CrudRepository –

+0

你檢查了我的答案嗎? – ByeBye

回答

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<>(); 
+0

據我所知,@ OrderBy(「USER_ID ASC」)訂單清單,訂單未在數據庫中實現。相反,我可以在響應前對數組進行排序。如果我將插入B,C,A,它只會對這個列表進行排序,但我需要以與發送請求相同的順序接收響應。 –

+1

我不認爲這是可能的。您可以添加其他列,如時間戳。爲什麼你需要這個功能? – ByeBye

+0

當前前端實現需要它。然後我看到唯一的解決方案是在連接表中添加額外的列並按照它排序。 –