Partage
  • Partager sur Facebook
  • Partager sur Twitter

Spring boot SaveAll avec relation OneToMany!

Bonjour, j'aimerais enregistrée une liste; méthode POST saveAll.

Sujet résolu
    7 septembre 2020 à 20:27:32

    Table dossier:

    import com.fasterxml.jackson.annotation.JsonFormat;
    
    import lombok.AllArgsConstructor;
    
    import lombok.Data;
    
    import lombok.NoArgsConstructor;
    
    import lombok.ToString;
    
    @Entity
    
    @Data @NoArgsConstructor @AllArgsConstructor @ToString
    
    public class Dossier implements Serializable  {
    
    	@Id
    
    	@GeneratedValue(strategy = GenerationType.IDENTITY)
    
    	private Long id;
    
    	
    
    	@JsonFormat(pattern="dd-MM-yyyy à HH:mm:ss")
    
    	@CreationTimestamp
    
        private LocalDateTime createdAt;
    
    	
    
    	private  String nom;
    
    	
    
    	@OneToMany(mappedBy = "dossier")
    
    	private List<Bar>  bar = new ArrayList<>();
    
    }

    Table Bar:

    package astria.hasi.projet.Model;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.ToString;
    
    @Entity
    @Data @NoArgsConstructor @AllArgsConstructor @ToString
    public class Bar {
    	@Id
    	@GeneratedValue(strategy = GenerationType.IDENTITY)
    	private Long Id;
    	
    	private String nana;
    	private String isa;
    
    	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    	@JoinColumn(name = "dossier_id") 
    	private Dossier dossier;
    }
    

    Bar Repository:

    package astria.hasi.projet.Repository;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.rest.core.annotation.RepositoryRestResource;
    import org.springframework.web.bind.annotation.CrossOrigin;
    import astria.hasi.projet.Model.Bar;
    
    @CrossOrigin( allowedHeaders="*")
    @RepositoryRestResource
    public interface BarRepository  extends JpaRepository<Bar, Long> {
    
    }

    Dossier Repository:

    package astria.hasi.projet.Repository;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.rest.core.annotation.RepositoryRestResource;
    import org.springframework.web.bind.annotation.CrossOrigin;
    import astria.hasi.projet.Model.Dossier;
    
    @CrossOrigin(allowedHeaders="*")
    @RepositoryRestResource
    public interface DossierRepository extends JpaRepository<Dossier, Long>  {
    
    }
    

    Bar Controller:

    package astria.hasi.projet.Controller;
    
    import java.util.List;
    
    import javax.validation.Valid;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.CrossOrigin;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RestController;
    import astria.hasi.projet.Model.Bar;
    import astria.hasi.projet.Model.Traitement;
    import astria.hasi.projet.Repository.BarRepository;
    import astria.hasi.projet.Repository.DossierMedicalRepository;
    import astria.hasi.projet.Repository.DossierRepository;
    import astria.hasi.projet.erreur.NotFoundException;
    
    @RestController
    @CrossOrigin( allowedHeaders="*")
    public class BarController {
    	
    	@Autowired
    	DossierRepository dossierRepository;
    	@Autowired
    	BarRepository barRepository;
    
    	
    	@PostMapping("/dossier/{dossierId}/bar")
    	public String  createBar(@PathVariable Long dossierId,
                @Valid @RequestBody List<Bar> lstBar ) {
    		return dossierRepository.findById(dossierId)
    				 .map(dossier -> {
    					
    					 try {
    						 for(Bar emp : lstBar){
    							 ((Bar) lstBar).setDossier(dossier);
    							barRepository.save(emp);  
    							 
    						 }
    						 
    						return "Bien enregistrée";
    					 }
    					 catch(Exception e){}
    					    return "Non enregistrée";
    				   
    					 }).orElseThrow(() -> new NotFoundException("dossier not found!"));
    	   
    	}
    	
    
    }
    

    erreur:

    "timestamp": "2020-09-07T14:40:48.399+0000",
        "status": 500,
        "error": "Internal Server Error",
        "message": "java.util.ArrayList cannot be cast to astria.hasi.projet.Model.bar",
        "path": "/dossier/1/bar"

    je crois que l'erreur se trouve dans la partie BarController et j'utilise le postman...

    Merci d'avance!!






    • Partager sur Facebook
    • Partager sur Twitter
      8 septembre 2020 à 17:31:24

      En general on pose une question, on est pas la (que) pour chercher des erreurs.

      Apress en lisant ton message d'erreur et ton code, je pense que la ligne 39 du BarController est fausse/pose probleme, en tout cas elle n'a aucun sens.

      • Partager sur Facebook
      • Partager sur Twitter
        8 septembre 2020 à 20:09:55

        Salut! Merci...

        Alors pour la question, j'aimerais enregistrée plusieurs Bar en même temps; avec la recuperation de ID du table Dossier en relation...

        • Partager sur Facebook
        • Partager sur Twitter
          8 septembre 2020 à 21:16:42

          Qu'est ce qui n'est pas clair dans le message d'erreur? 

          java.util.ArrayList cannot be cast to astria.hasi.projet.Model.bar

          • Partager sur Facebook
          • Partager sur Twitter
            8 septembre 2020 à 21:38:09

            Ah oui.. vraiment pas claire... j'arrive pas à enregistrer un List<Bar>

            Et si j’enlève la ligne 39 de BarController, tout est enregistrer mais j'arrive pas à récupérer le Id de table dossier que j'aimerais récupérer...

            tu peux m'aider...

            Merci Play50Hz...

            • Partager sur Facebook
            • Partager sur Twitter
              8 septembre 2020 à 23:07:47

              Oui, mais quel est le but de la ligne 39. Parce que tu essai de caster une liste de bar en bar, je pense que tu t'es trompée de nom de variable et que tu voulais mettre emp à la place de lstBar.
              • Partager sur Facebook
              • Partager sur Twitter
                8 septembre 2020 à 23:39:24

                Je suis vraiment perdu... Ca marche!!

                La solution: emp à la place de lstBar.

                Merci beaucoup Thetui... ça fait du bien!!

                • Partager sur Facebook
                • Partager sur Twitter

                Spring boot SaveAll avec relation OneToMany!

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown