Java Spring引导:将子实体保存到父实体

Java Spring引导:将子实体保存到父实体,java,spring,spring-boot,spring-mvc,spring-data-jpa,Java,Spring,Spring Boot,Spring Mvc,Spring Data Jpa,我正在开发一个SpringBootWeb应用程序,跟踪一家公司的硬件交易。用户可以为事务创建“新记录”。在创建新记录的页面上,他们可以向记录添加“硬件项”。hwItem是父实体newRecord的子实体。以下是仅显示相关方法的两个实体: @Entity @Table(name="Records") public class NewRecord extends Auditable<String>{ @Id @GeneratedValue(strat

我正在开发一个SpringBootWeb应用程序,跟踪一家公司的硬件交易。用户可以为事务创建“新记录”。在创建新记录的页面上,他们可以向记录添加“硬件项”。hwItem是父实体newRecord的子实体。以下是仅显示相关方法的两个实体:

@Entity
@Table(name="Records")
public class NewRecord extends Auditable<String>{

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="recordId")
    private Long recordId;
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(pattern="yyyy/MM/dd hh:mm:ss")
    @Column(name="dateCreated")
    private Date dateCreated;
    @CreatedBy
    @Size(max=30)
    @Column(name="createdBy")
    private String createdBy; //Auditable.java and other Auditable data all required for "createdBy"

    @Size(min=0, max=50, message="{newRecord.rfqCustomerNumber.size}")
    .
    .
    .

    @OneToMany(mappedBy="record", cascade = {CascadeType.ALL})
    private Set<HardwareItems> items;

    public void addToChildren(HardwareItems item) {
        item.setParent(this);
        this.items.add(item);
    }

    public Set<HardwareItems> getItems() {
        return items;
    }

    public void setItems(Set<HardwareItems> items) {
        this.items = items;
    }
...
}

@Entity
@Table(name="HardwareItems")
public class HardwareItems {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="id")
    private long id;
    
    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name="record_id", nullable=false) 
    private NewRecord record;
    
    @Size(min=0, max=100, message="{newRecord.hwDescription.size}")
    @Column(name="hwDescription")
    private String hwDescription;
    @Size(min=0, max=100, message="{newRecord.hwSerialNumber.size}")
    @Column(name="hwSerialNumber")
    private String hwSerialNumber;
    @Size(min=0, max=100, message="{newRecord.hwModelNumber.size}")
    @Column(name="hwModelNumber")
    private String hwModelNumber;
    
    public void setParent(NewRecord newRecord) {
        // TODO Auto-generated method stub
        
    }
    .
    .
    .
}
那么我迷路的地方是在NewRecordController中。有关方法如下:

    @RequestMapping(value="/hwItem", method=RequestMethod.POST)
    ModelAndView hwItem(ModelAndView modelAndView, @PathVariable Long recordId, @ModelAttribute(value="hwItem")@Valid @RequestBody HardwareItems hwItem, BindingResult result) {
        
        //modelAndView.setViewName("app.newRecord");
        
        if(!result.hasErrors()) {
            hwItemsService.save(hwItem);
            modelAndView.getModel().put("hwItem", new HardwareItems());
            modelAndView.setViewName("redirect:/newRecord");
        }
        
        return modelAndView;
    }
    
    @RequestMapping(value="/newRecord", method=RequestMethod.POST)
    ModelAndView newRecord(ModelAndView modelAndView, @ModelAttribute(value="newRecord")@Valid NewRecord newRecord, BindingResult result) {
        
        modelAndView.setViewName("app.newRecord");
        
        if(!result.hasErrors()) {
            
            newRecord.addToChildren(item);
            
            
            newRecordService.save(newRecord);
            modelAndView.getModel().put("newRecord", new NewRecord());
            modelAndView.setViewName("redirect:/home");
        }
        
        return modelAndView;
    }
很明显,我正试图保存hwItem,然后将其传递给并保存到newRecord,但我不确定这样做是否正确。任何见解都会有所帮助。谢谢

    @RequestMapping(value="/hwItem", method=RequestMethod.POST)
    ModelAndView hwItem(ModelAndView modelAndView, @PathVariable Long recordId, @ModelAttribute(value="hwItem")@Valid @RequestBody HardwareItems hwItem, BindingResult result) {
        
        //modelAndView.setViewName("app.newRecord");
        
        if(!result.hasErrors()) {
            hwItemsService.save(hwItem);
            modelAndView.getModel().put("hwItem", new HardwareItems());
            modelAndView.setViewName("redirect:/newRecord");
        }
        
        return modelAndView;
    }
    
    @RequestMapping(value="/newRecord", method=RequestMethod.POST)
    ModelAndView newRecord(ModelAndView modelAndView, @ModelAttribute(value="newRecord")@Valid NewRecord newRecord, BindingResult result) {
        
        modelAndView.setViewName("app.newRecord");
        
        if(!result.hasErrors()) {
            
            newRecord.addToChildren(item);
            
            
            newRecordService.save(newRecord);
            modelAndView.getModel().put("newRecord", new NewRecord());
            modelAndView.setViewName("redirect:/home");
        }
        
        return modelAndView;
    }