Redundante Einträge in Tabellen

txangel

Benutzer
Beiträge
6
Hi,

ich hoffe jmd kann mir helfen ;).

Ich hab eine n-zu-m Beziehung, also eine Zwischentabelle.

Ich habe eine Tabelle Vortrag, eine Tabelle Teilnehmer und eine Tabelle Vorträge_Teilnehmer.

Ich füge nun einen Vortrag hinzu, der einen Teilnehmer enthält.
Gebe ich mir nun die Liste aus der Tabelle Teilnehmer heraus, habe ich nun einen Eintrag.

Dann erstelle ich einen zweiten Eintrag in der Tabelle Vortrag mit dem gleichen Teilnehmer. Vor dem Hinzufügen frage ich im Code ab,
ob es den Teilnehmer in der Datenbank Teilnehmer gibt, wenn ja, füge ihn nicht hinzu.

Somit gibt mir mein Debugger im Repository Teilnehmer einen Eintrag heraus. Wenn ich nun einen neuen Get-Request über alle Teilnehmer ausführe, erhalte ich
zwei Einträge mit demselben Teilnehmer.

Was jmd. was ich beachten muss?

Danke
 
Werbung:
Ich rate mal…

du joinst bei deinem query die Vorträge über teilnehmer_vorträge. Daher bekommst du natürlich zweimal den Teilnehmer da er zwei Vorträge hat

aber es würde schon ein wenig helfen wenn du uns deine queries sagst…
 
hi,

Java:
body.getParticipants().forEach(participant -> {

      if (participantRepository.findByFirstNameAndLastName(participant.getFirstName(),
                                                           participant.getLastName()).isEmpty()) {
                participantRepository.save(participant);
       }
 });


trackRepository.save(new Track(body.getTitle(),
                               ....
                               body.getParticipants()));

Java:
public class Track {

....

  @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
    @JoinTable(name = "tracks_participants",
             joinColumns = {@JoinColumn(name = "track_id",
                                        referencedColumnName = "id",
                                        nullable = false,
                                        updatable = false)},

            inverseJoinColumns = {@JoinColumn(name = "participant_id",
                                              referencedColumnName = "id",
                                              nullable = false,
                                              updatable = false)})

    private Set<Participant> participants = new HashSet<>();

}

SQL:
CREATE TABLE tracks_participants (
    track_id BIGINT references tracks,
    participant_id BIGINT references participants,
    primary key(track_id, participant_id)
);
 
Zuletzt bearbeitet:
Sorry da kann ich nicht helfen da ich nicht weiß was Spring da für Queries drauf bastelt. Es wäre besser die nativen DB Queries zu sehen.
 
Werbung:
Zurück
Oben