2016-08-23 1 views
1

Ich habe bidirektionale @ManyToMany Beziehung zwischen zwei Tabellen:Hibernate verwalten @ManyToMany Tabelle Einfügungen und Aufträge

@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<>(); 
} 

Wenn ich die Aktualisierung Benutzer von ihnen:

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); 
} 

Wenn ich Blick in die entsprechende Join-Tabelle, die Zeilen ohne Reihenfolge eingefügt.

Also, wenn ich Benutzer Körper und eine Liste der Gruppen im Inneren bin das Senden:

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

Und dann Dienst Ich rufe die Daten von DB extrahiert und die Reihenfolge ist nicht das gleiche:

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

Wie kann ich die Reihenfolge der Zeilen in Join-Tabelle verwalten? Ich brauche die Reihenfolge der Datensätze haben, in der Tabelle kommt die gleiche, wie die Reihenfolge der Anfrage:

| 1 | 2 | 
| 1 | 1 | 

ich Oracle DB bin mit.

+0

Stehen Sie mit JPARepository? – ByeBye

+0

Ich benutze CrudRepository –

+0

Haben Sie meine Antwort überprüft? – ByeBye

Antwort

1

Sie benötigen @OrderBy Anmerkung hinzuzufügen:

@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

Wie ich weiß, @OrderBy ("USER_ID ASC") Bestellliste, wo die Bestellung nicht in der Datenbank materialisiert ist. Stattdessen kann ich Array vor der Antwort sortieren. Wenn ich B, C, A einfüge, wird es nur diese Liste sortieren, aber ich muss die Antwort in der gleichen Reihenfolge erhalten wie Anfrage gesendet wurde. –

+1

Ich glaube nicht, dass es möglich ist. Sie können zusätzliche Spalte als etwas wie Zeitstempel hinzufügen. Warum benötigen Sie diese Funktionalität? – ByeBye

+0

Dies wird von der aktuellen Front-End-Implementierung benötigt. Dann sehe ich die einzige Lösung ist, zusätzliche Spalte in der Join-Tabelle hinzuzufügen und danach zu sortieren. –

Verwandte Themen