0
votes

NullPoinger Exception après avoir essayé de supprimer l'enregistrement de la base de données avec Entity Manager dans l'application Spring

Je travaille sur l'application de printemps qui gère une buïtel dogshotel. Dans l'application, j'ai deux entités classe - cage et chien (un des attributs de chien est la cage). Les données sur les chiens et les cages sont stockées dans la base de données MySQL. Dans la demande, nous créons d'abord un objet chien initialisant des attributs comme: Nom, âge, race, sexe, nom du propriétaire, numéro de propriétaire. Après avoir utilisé la méthode Persist Manager Entity Manager dans Dogexitory Class, un nouvel enregistrement apparaît dans la base de données: xxx pré>

Screenshot de base de données P>

Sauf les attributs que nous entrons lors de la création de chien, nous pouvons attribuer une cage à elle et initialiser d'autres atrributes: int DuréeFstaYindays, localDate startoFstaYdate, localDate EndoFstayDate, int bien-actérotte. P>

Le problème est le suivant: Lorsque le chien a attribué la cage, je peux le supprimer avec une personne responsable, mais quand il n'a pas de cage, je reçois la nullpointerexception en essayant pour le supprimer. Auparavant, je gérant l'application sans utilisation de la base de données (les enregistrements ont été stockés dans des cartes dans un programme) et tout fonctionnait correctement. Dans mon code, il y a des classes: Chien (entité) -> Dogexitory -> Dogservice -> DogController. Voici les fragments de code de Dogexitory and Dog Class: P>

Classe de chien: P>

 public void removeDog(Integer id) {
    dogRepository.removeDog(id);
}


1 commentaires

S'il vous plaît poster l'exception et StackTrace.


3 Réponses :


0
votes

Cela se produit parce que vous ne vérifiez pas si la cage est null, avant de vérifier si elle est occupée. Je pense que le code devrait ressembler à ceci: xxx

En outre, votre méthode setNullCage () a la même faille.


0 commentaires

0
votes

1) S'il n'y a pas de cage sur un chien (code> xxx

échouera naturellement. . Vous devez ajouter dog.getcage ()! = null && .

2) Je ne mettrais pas la logique qui manipule l'entité sur l'entité 2 . Ce sont deux domaines distincts. Personnellement, j'utiliserais une classe externe pour cela.

3) Vous n'avez pas besoin de définir explicitement la cage sur null sur le Chien où vous le supprimez. Sauf si vous avez cascade.remove configuré et que vous souhaitez expliquer explicitement cela.


0 commentaires

0
votes

Je pense que votre code dépasse des choses. Remplacez le ci-dessous xxx pré>

avec p>

public void setNullCage() {
     this.cage = null;
}


0 commentaires