Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在SpringBoot中使用单个@postmapping填充多个表_Java_Sql_Spring_Jpa - Fatal编程技术网

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

Java 如何在SpringBoot中使用单个@postmapping填充多个表,java,sql,spring,jpa,Java,Sql,Spring,Jpa,我开发了一个应用程序,允许管理候选人,该应用程序包含两个表(候选人和技术)与@ManyToMany连接表连接,我正在寻找如何用相同的@PostMapping填充这两个表,正如我的代码所示。我使用的是一个角度应用程序,它向候选人发送所有信息和技术表(候选人必须选择,他不能添加新技术)。我想加入新候选人的行列,加入一些技术方面的内容。这是控制器将接收到的内容: {prenom: "Pname", nom: "Name", pseudo: "Pnamename", ecole: "school", m

我开发了一个应用程序,允许管理候选人,该应用程序包含两个表(候选人和技术)与@ManyToMany连接表连接,我正在寻找如何用相同的@PostMapping填充这两个表,正如我的代码所示。我使用的是一个角度应用程序,它向候选人发送所有信息和技术表(候选人必须选择,他不能添加新技术)。我想加入新候选人的行列,加入一些技术方面的内容。这是控制器将接收到的内容:

{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());