【问题标题】:one to Many mapping is not updating foreign key value一对多映射不更新外键值
【发布时间】:2023-01-21 17:00:15
【问题描述】:

我创建员工表单,员工可以从下拉列表中选择多项技能,当提交按钮单击表单时将被保存,我有外键表表单技能,其中 formid 和 skillid 将根据选择进行映射,但我无法实现此映射,我已经尝试过来自网上的许多解决方案对我没有任何帮助

技能下拉列表 FE- Skills dropdown image

有效载荷 Form-payload image

数据库表: 表格 FormTable 技能表: Skillstable 表格技能表: Foreignkeys table


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

控制器:

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

【问题讨论】:

  • 员工表格,员工从下拉列表中选择多项技能,当提交按钮时,clicke 表格将被保存

标签: spring-boot spring-data-jpa one-to-many spring-restcontroller hibernate-onetomany


【解决方案1】:

我相信您想要的是,在插入 FormModel 实体时,系统还应该自动插入所有关联的 SkillsModel 实体,而无需遍历列表并逐一插入每个技能,对吗?

如果是这种情况,请进行以下更改:

技能模型:

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

...

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    相关资源
    最近更新 更多