簡體   English   中英

一對多映射不更新外鍵值

[英]one to Many mapping is not updating foreign key value

我創建了員工表單,其中員工可以從下拉列表中獲得 select 多項技能,當提交按鈕時,點擊表單將被保存,我有外鍵表表單技能,其中 formid 和 skillid 將根據選擇進行映射,但我無法獲得此映射,我已經嘗試過來自網上的許多解決方案對我沒有任何幫助

技能下拉FE- 技能下拉圖像

FE Payload Form-payload圖片

數據庫表:FormTable FormTable SkillTable: Skillstable FormSkills 表:外鍵表


BE實體代碼

表格模型:

@Entity
@Table(name="forms")
@SequenceGenerator(name="seq", initialValue=25, allocationSize=100)
public class FormModel implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE,generator = "seq")
    private Long formid;
    private String firstName;
    private String lastName;
    @Column(nullable=false)
    private String Email;
    private long mobileNumber;
    private int overalExperience;
    private int relaventExperience;
    private Date dateOfBirth;
    private String adarNumber;
    @Column(name="name_of_college")
    private String nameOfCollege;
    
    private String certificates;
    
    @OneToMany(mappedBy="formmodel",cascade=CascadeType.ALL,orphanRemoval=true)
    private List<SkillsModel> skills;

技能模型:

@Entity
@Table(name="skills")
public class SkillsModel implements Serializable{

    @Id
     @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name="skill_id")
    private Integer skillid;
    
    @Column(name="skill_name")
    private String skillname;
    
    public SkillsModel() {}
    public SkillsModel(Integer skillid, String skillname) {
        super();
        this.skillid = skillid;
        this.skillname = skillname;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinTable(name="formskills",joinColumns = {@JoinColumn(name="skillid")},inverseJoinColumns = {@JoinColumn(name="formid")})
    private FormModel formmodel;
    
    
    public SkillsModel(Integer skillid, String skillname, FormModel formmodel) {
        super();
        this.skillid = skillid;
        this.skillname = skillname;
        this.formmodel = formmodel;
    }

Controller:

@CrossOrigin(origins = "http://localhost:4200")
@RestController
public class FormController {
    
    @Autowired
    private FormService service;
    
    
    @GetMapping("/getskills")
    public List<SkillsModel> getskills() {
        return service.getskills();
    }
    
    @PostMapping(value="/saveuser")
    public ResponseEntity<Object> createUser(@RequestBody FormModel model) {    
              System.out.println(model.getSkills().get(0));
             FormModel modelform=service.createuserform(model);
           
        URI location=ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}")
                .buildAndExpand(modelform.getFormid()).toUri();
        return ResponseEntity.created(location).build() ;
    }
    
    @GetMapping("/getforms")
    public List<FormModel> getformdata() {
         return service.getformdata();
    }

服務:

@Service
public class FormService {
    
    @Autowired
    private FormRepository formrepo;
    @Autowired
    private Skillsrepository skillsrepo;
    
    public FormModel createuserform(FormModel userform) {
           FormModel modelform=formrepo.save(userform);
        return  modelform;
    }
    
    public List<SkillsModel> getskills() {
        List<SkillsModel> getskills=new ArrayList<>();
        
        getskills=skillsrepo.findAll();
        for(SkillsModel model :getskills) {
            System.out.println(model.getSkillid() + model.getSkillname());
        }
        return getskills;
    }

    public List<FormModel> getformdata() {
         List<FormModel> formlist= formrepo.findAll();
         System.out.println(formlist);
        return formlist;
    }

我相信您想要的是,在插入FormModel實體時,系統還應該自動插入所有關聯的SkillsModel實體,而無需遍歷 List 並逐個插入每個 Skill,對嗎?

如果是這種情況,請進行以下更改:

技能模型:

public class SkillsModel implements Serializable {

...

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "formid")
    private FormModel formmodel;

...

}

表單服務:

@Service
public class FormService {

...

    public FormModel createuserform(FormModel userform) {
    
        for (SkillsModel skill: userform.getSkills()) {
            skill.setFormmodel(userform);
        }
    
        FormModel modelform = formrepo.save(userform);
        return  modelform;
    }

...

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM