Java Spring引导:将子实体保存到父实体
我正在开发一个SpringBootWeb应用程序,跟踪一家公司的硬件交易。用户可以为事务创建“新记录”。在创建新记录的页面上,他们可以向记录添加“硬件项”。hwItem是父实体newRecord的子实体。以下是仅显示相关方法的两个实体: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
@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;
}