Table des matières
Bonne réponse
Maison Java Dois-je créer une fonction de mise à jour pour chaque propriété ou dois-je autoriser des mises à jour partielles ?

Dois-je créer une fonction de mise à jour pour chaque propriété ou dois-je autoriser des mises à jour partielles ?

Feb 05, 2024 pm 09:33 PM

Contenu de la question

Comment le processus de mise à jour doit-il être mis en œuvre ? Est-il recommandé de faire une mise à jour forcée de toutes les propriétés (premier exemple) ou dois-je ajouter une condition de vérification nulle pour autoriser les mises à jour partielles (deuxième exemple) ?

Premier exemple

@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);
    }
Copier après la connexion

Deuxième exemple

@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);
    }
Copier après la connexion

C'est un projet personnel grossier. J'ai la même question sur la méthode post.


Bonne réponse


Avec des classes et des relations correctement définies, vous pouvez simplement utiliser la Deuxième méthode, qui est claire et facile à comprendre.

Par définition appropriée des relations, j'entends la cartographie entre classes (qu'elles soient individuelles ou un-à-plusieurs, etc.) et leurs types de cascade . Dans votre cas, vous pouvez utiliser CascadeType.ALL qui propagera toutes les opérations de base de données effectuées sur la classe parent à la classe enfant. Ainsi, lorsque vous enregistrez l'objet parent, vos objets enfants sont également enregistrés. Même si votre sous-classe n'existe pas dans la base de données, elle en créera une pour vous.

Désormais, votre première approche fonctionne également dans quelques cas. Par exemple, supposons que vous envoyiez une requête contenant des données de ville, où pour un identifiant donné, le nom fourni est différent du nom dans la base de données. Donc, pour votre approche, vous ne mettez pas à jour les différents noms dans la base de données, mais vous récupérez les données réelles de la base de données et les définissez. Mais si vous suivez la deuxième méthode, elle écrasera les données existantes du nom de la ville.
Pour surmonter les problèmes de la deuxième approche, vous pouvez modifier la cascade en CascadeType.PERSIST, qui propagera uniquement les opérations de sauvegarde aux sous-classes, pas les opérations de mise à jour ou de suppression.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)