如何使用单个@postmapping填充多个表?

时间:2019-10-22 15:26:44

标签: java spring-boot

我开发了一个允许管理候选人的应用程序,该应用程序包含两个表(候选表和技术表)以及一个@ManyToMany联接表,我正在寻找如何用相同的@PostMapping填充这两个表。代码指示。我正在使用一个Angular应用程序,发送带有所有信息的候选资格和一个techno表(候选者必须选择,他不能添加新的techno)。我想以某种技术加入新的候选人。这是控制器将收到的:

   {prenom: "Pname", nom: "Name", pseudo: "Pnamename", ecole: "school", mail: "email@email.com", …}
    ecole: "school"
    mail: "email@email.com"
    nom: "Name"
    numTel: "0123456789"
    prenom: "Pname"
    pseudo: "Pnamename"
    roleCible: "poste"
    secteurActivites: "sector"
    techno: Array(3)
    0: "android"
    1: "drupal"
    2: "html"
    length: 3
    __proto__: Array(0)
    typeContrat: "CDI"
    villeRecherchee: "Paris"
    __proto__: Object

1- Candidat.java

@Entity
@Table(name = "Candidats")
public class Candidat {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    private String nom;
    private String prenom;
    private String ecole;
    private String numTel;
    private String mail;
    private String pseudo;
    private String roleCible;
    private String typeContrat;
    private String villeRecherchee;

    @Temporal(TemporalType.DATE)
    private Date dateCurrent = new Date();

    @ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
    @JoinTable(name = "candidat_techno", joinColumns = { @JoinColumn(name = "candidat_id") }, 
      inverseJoinColumns = {
            @JoinColumn(name = "techno_id") })

    private Set<Techno> techno = new HashSet<>();

    public Candidat() {

    }
    @SuppressWarnings("unchecked")
    public Candidat(String nom, String prenom, String ecole, String numTel, String mail, String pseudo,
            String roleCible, String typeContrat, String villeRecherchee, List<Techno> techno, Date dateCurrent,) {
        super();
        this.nom = nom;
        this.prenom = prenom;
        this.ecole = ecole;
        this.numTel = numTel;
        this.mail = mail;
        this.pseudo = pseudo;
        this.roleCible = roleCible;
        this.typeContrat = typeContrat;
        this.villeRecherchee = villeRecherchee;
        this.techno = (Set<Techno>) techno;
        this.dateCurrent = new Date();  

     //getters ans setters

2- CandidatController

     @CrossOrigin(origins = "http://localhost:4200")
        @RestController
        @RequestMapping("/avatar")
        public class CandidatController {

            @Autowired
            CandidatDao candidatdao;    
            @Autowired
            TechnoDao technoDao;

        @PostMapping(value = "/add-candidat")
        public Candidat addCandidate(@RequestBody Candidat Candidat) {

            Candidat candidatAdded = candidatdao.save(Candidat);
            return candidatAdded;   
    technodao.save(Candidat.getTechno());
        }


}

3- CandidatDAO

   @Repository
    public interface CandidatDao extends JpaRepository<Candidat, String> {
    }

4-Techno.java

@Entity
@Table(name = "techno")
public class Techno {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    private String nomTechno;

    @ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE }, mappedBy = "techno")

    private Set<Candidat> candidat = new HashSet<Candidat>();

    public Techno() {

    }

    @SuppressWarnings("unchecked")
    public Techno(String nomTechno, Candidat candidat) {
        super();
        this.nomTechno = nomTechno;
        this.candidat = (Set<Candidat>) candidat;
    }

    public String getNomTechno() {
        return nomTechno;
    }

    public void setNomTechno(String nomTechno) {
        this.nomTechno = nomTechno;
    }

    @Override
    public String toString() {
        return "Techno [nomTechno=" + nomTechno + ", candidat=" + candidat + "]";
    }

   //getters ans setters

5- TechnoController

@CrossOrigin(origins = "http://localhost:4200")
@RestController
@RequestMapping("/avatar")
public class TechnoController {

    @Autowired
    TechnoDao technodao;

    @PostMapping(value = "/add-techno")
    public Techno addCandidate(@RequestBody Techno Techno) {

        Techno technoAdded = technodao.save(Techno);
        return technoAdded;
    }

}

6- TechnoDao

 @Repository
    public interface TechnoDao extends JpaRepository<Techno, String> {
    Techno save(Set<Techno> techno);
    }

现在我可以填充两个表,但是要使用两个不同的后映射。 如何使用单个@post映射同时填充两个表(techno和候选人)?像这样:

    {
    id: 1,
    nom: "smith",
    prenom: "john",
    ecole: "usa",
    numTel: "11111",
    mail: "j@smith",
    pseudo: "JS",
    roleCible: "usa",
    typeContrat: "usa",
    villeRecherchee: "paris",       
    dateCurrent: "2019-10-02",
    techno: [
        {
          id: 1,
          nomTechno: "springBoot"
        },
        {
         id: 2,
         nomTechno: "java"
         }
           ]
  }

0 个答案:

没有答案