Java 如何在SpringBoot中使用单个@postmapping填充多个表
我开发了一个应用程序,允许管理候选人,该应用程序包含两个表(候选人和技术)与@ManyToMany连接表连接,我正在寻找如何用相同的@PostMapping填充这两个表,正如我的代码所示。我使用的是一个角度应用程序,它向候选人发送所有信息和技术表(候选人必须选择,他不能添加新技术)。我想加入新候选人的行列,加入一些技术方面的内容。这是控制器将接收到的内容:Java 如何在SpringBoot中使用单个@postmapping填充多个表,java,sql,spring,jpa,Java,Sql,Spring,Jpa,我开发了一个应用程序,允许管理候选人,该应用程序包含两个表(候选人和技术)与@ManyToMany连接表连接,我正在寻找如何用相同的@PostMapping填充这两个表,正如我的代码所示。我使用的是一个角度应用程序,它向候选人发送所有信息和技术表(候选人必须选择,他不能添加新技术)。我想加入新候选人的行列,加入一些技术方面的内容。这是控制器将接收到的内容: {prenom: "Pname", nom: "Name", pseudo: "Pnamename", ecole: "school", m
{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-candidate.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
}
3-候选人条例
@Repository
public interface CandidatDao extends JpaRepository<Candidat, String> {
}
6-TechnoDao
@Repository
public interface TechnoDao extends JpaRepository<Techno, String> {
Techno save(Set<Techno> techno);
}
在CandidateController中,添加以下内容:
@Autowired
TechnoDao technoDao;
在post映射内部使用以下选项:
technoDao.save(candidat.getTechno());
这对您很有帮助。您可以在CandidateController中DI TechnoDAO并调用方法在那里保存techno。感谢您的回答,但我也有同样的问题,当我使用Postman使用techno保存候选人时,我有以下问题:“JSON解析错误:java.util.ArrayList无法转换为java.util.Set;嵌套异常为com.fasterxml.jackson.databind.JsonMappingException:java.util.ArrayList不能在[Source:(PushbackInputStream);第26行,第3列](通过引用链:com.avatar.model.candidate[\“techno\”])”处转换为java.util.Set\n,
@Repository
public interface TechnoDao extends JpaRepository<Techno, String> {
Techno save(Set<Techno> 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"
}
]
}
@Autowired
TechnoDao technoDao;
technoDao.save(candidat.getTechno());