Heim  >  Artikel  >  Soll ich für jede Eigenschaft eine Aktualisierungsfunktion erstellen oder Teilaktualisierungen zulassen?

Soll ich für jede Eigenschaft eine Aktualisierungsfunktion erstellen oder Teilaktualisierungen zulassen?

WBOY
WBOYnach vorne
2024-02-05 21:33:071391Durchsuche
Frageninhalt

Wie soll der Update-Prozess umgesetzt werden? Wird eine erzwungene Aktualisierung aller Eigenschaften empfohlen (erstes Beispiel) oder sollte ich eine Nullprüfungsbedingung hinzufügen, um Teilaktualisierungen zu ermöglichen (zweites Beispiel)?

Erstes Beispiel

@transactional
    @override
    public teamdto updateteambyid(long id, teamdto teamdto) throws apiexception {
        optional<team> teamoptional = teamrepository.findbyid(id);

        if (teamoptional.ispresent()) {
            team existingteam = teamoptional.get();

            // if objects id are sent in json, set attributes via id.
            if (teamdto != null) {

                if(teamdto.getcity() != null){
                    if (teamdto.getcity().getid() != null) {
                        citydto citydto = cityserviceimp.getcitybyid(teamdto.getcity().getid());
                        existingteam.setcity(citymapper.citydtotocity(citydto));
                    } else if(teamdto.getcity().getname() != null){
                        existingteam.setcity(citymapper.citydtotocity(cityserviceimp.createcity(teamdto.getcity())));
                    }
                }
                if(teamdto.getstadium() != null){
                    if (teamdto.getstadium().getid() != null) {
                        stadiumdto stadiumdto = stadiumserviceimp.getstadiumbyid(teamdto.getstadium().getid());
                        existingteam.setstadium(stadiummapper.stadiumdtotostadium(stadiumdto));
                    } else if(teamdto.getstadium().getname() != null){
                        existingteam.setstadium(stadiummapper.stadiumdtotostadium(stadiumserviceimp.createstadium(teamdto.getstadium())));
                    }
                }
                if(teamdto.getdivision() != null){
                    if (teamdto.getdivision().getid() != null) {
                        divisiondto divisiondto = divisionserviceimp.getdivisionbyid(teamdto.getdivision().getid());
                        existingteam.setdivision(divisionmapper.divisiondtotodivision(divisiondto));
                    } else if(teamdto.getdivision().getname() != null){
                        existingteam.setdivision(divisionmapper.divisiondtotodivision(divisionserviceimp.createdivision(teamdto.getdivision())));
                    }

                }

                return teammapper.teamtoteamdto(teamrepository.save(existingteam));
            }
        }
        throw new teamnotfoundexception(id);
    }

Zweites Beispiel

@Transactional
    @Override
    public TeamDTO updateTeamById(Long id, TeamDTO teamDTO) throws ApiException {
        Team team = teamMapper.teamDTOToTeam(teamDTO);
        Optional<Team> teamOptional = teamRepository.findById(id);

        if (teamOptional.isPresent()) {
            Team existingTeam = teamOptional.get();
            
            existingTeam.setName(team.getName());
            existingTeam.setDivision(team.getDivision());
            existingTeam.setCity(team.getCity());
            existingTeam.setStadium(team.getStadium());
            existingTeam.setHomeMatches(team.getHomeMatches());
            existingTeam.setAwayMatches(team.getAwayMatches());
            
            return teamMapper.teamToTeamDTO(teamRepository.save(existingTeam));
            }
        throw new TeamNotFoundException(id);
    }

Dies ist ein grobes persönliches Projekt. Ich habe die gleiche Frage zur Post-Methode.


Richtige Antwort


Mit korrekt definierten Klassen und Beziehungen können Sie einfach die Zweite Methode verwenden, die sauber und leicht zu verstehen ist.

Mit der richtigen Beziehungsdefinition meine ich die Zuordnung zwischen Klassen (sei es eins zu eins oder eins zu viele usw.) und ihren Kaskadentypen . In Ihrem Fall können Sie CascadeType.ALL verwenden, wodurch alle für die übergeordnete Klasse durchgeführten Datenbankoperationen an die untergeordnete Klasse weitergegeben werden. Wenn Sie also das übergeordnete Objekt speichern, werden auch Ihre untergeordneten Objekte gespeichert. Auch wenn Ihre Unterklasse nicht in der Datenbank vorhanden ist, wird eine für Sie erstellt.

Nun funktioniert Ihr erster Ansatz in einigen Fällen auch. Angenommen, Sie senden eine Anfrage mit einigen Stadtdaten, wobei für eine bestimmte ID der angegebene Name vom Namen in der Datenbank abweicht. Für Ihren Ansatz aktualisieren Sie also nicht die verschiedenen Namen in der Datenbank, sondern rufen die tatsächlichen Daten aus der Datenbank ab und legen sie fest. Wenn Sie jedoch der zweiten Methode folgen, werden die vorhandenen Daten des Stadtnamens überschrieben.
Um die Probleme im zweiten Ansatz zu lösen, können Sie die Kaskade in CascadeType.PERSIST ändern, wodurch Speichervorgänge nur an Unterklassen weitergegeben werden, keine Aktualisierungs- oder Löschvorgänge.

Das obige ist der detaillierte Inhalt vonSoll ich für jede Eigenschaft eine Aktualisierungsfunktion erstellen oder Teilaktualisierungen zulassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen