

Dois-je créer une fonction de mise à jour pour chaque propriété ou dois-je autoriser des mises à jour partielles ?
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); }
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); }
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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