如何在SpringBoot中使用单个@postmapping填充多个表

时间:2019-10-22 09:08:24

标签: java sql spring jpa

我开发了一个允许管理候选人的应用程序,该应用程序包含两个表(候选表和技术表)以及一个@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"
         }
           ]
  }

1 个答案:

答案 0 :(得分:1)

在您的CandidateController中,添加以下内容:

@Autowired
TechnoDao technoDao;

内部帖子映射使用此:

technoDao.save(candidat.getTechno());

这必须为您提供帮助。