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 ?

WBOY
Libérer: 2024-02-05 21:33:07
avant
1445 Les gens l'ont consulté
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!

source:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal