Как заполнить несколько таблиц одновременно - PullRequest
0 голосов
/ 23 октября 2019

У меня есть контроллер пружинной загрузки с пост-методом. Я хочу заполнить две таблицы одновременно одним и тем же пост-отображением, зная, что у этих двух связей есть отношение «многие ко многим».

1- Кандидат

@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,)
{...}

2- CandidatController

@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

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

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

public Techno() {}

5-TechnoController

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);
}

Сейчас я могуЗаполните обе таблицы, но с двумя различными сопоставлениями записей. как заполнить обе таблицы (техно и кандидат) одновременно ?? как это:

{
    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 голосов
/ 23 октября 2019

Насколько я знаю, @RequestBody может быть использован только один раз (то есть вы можете иметь только одно объявление в качестве параметра как @RequestBody). Поэтому вы либо сохраняете два разделенных отображения, либо передаете оба объекта как JSON как RequestBody, а затем в методе, который вы используете для создания обоих объектов «вручную» на основе данных JSON.

Я нашел отличныйобъяснение множественных @RequestBody в отображениях здесь .

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...