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