![](/img/trans.png)
[英]foreign key not updating in child table in many to one mapping in spring boot jpa
[英]one to Many mapping is not updating foreign key value
我創建了員工表單,其中員工可以從下拉列表中獲得 select 多項技能,當提交按鈕時,點擊表單將被保存,我有外鍵表表單技能,其中 formid 和 skillid 將根據選擇進行映射,但我無法獲得此映射,我已經嘗試過來自網上的許多解決方案對我沒有任何幫助
技能下拉FE- 技能下拉圖像
FE Payload Form-payload圖片
數據庫表:FormTable FormTable SkillTable: Skillstable FormSkills 表:外鍵表
表格模型:
@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.