我的程序要求是將新的父項與子項一起添加到數據庫中。到目前爲止,我有在父類此方法:Spring Hibernate插入父項與子項一起
@Transient
public void addLecturer(Lecturer lecturer) {
if(lecturers == null) {
lecturers = new ArrayList<Lecturer>();
}
lecturer.setChecker(this);
this.lecturers.add(lecturer);
}
然後保存父在我父道:
@Override
public void addChecker(Lecturer checker) {
Session session = sessionFactory.getCurrentSession();
session.save(checker);
}
我的控制器:
@RequestMapping(value="/matching_page", method = RequestMethod.GET)
public ModelAndView get(@ModelAttribute("checker") Lecturer checker, BindingResult
result) {
ArrayList<String> lecturers = new ArrayList<String>();
lecturers.add("Somma");
lecturers.add("Trina");
lecturers.add("Adam");
lecturers.add("Eve");
HashMap<String, ArrayList<String>> model = new HashMap<String
ArrayList<String>>();
model.put("lecturerList", lecturers);
return new ModelAndView("matching_page", "model", model);
}
@RequestMapping(value="/matching_page", method = RequestMethod.POST)
public ModelAndView hello(@ModelAttribute("checker") Lecturer checker,
BindingResult result) {
lecturerService.addChecker(checker);
return new ModelAndView ("redirect:/admin");
}
JSP表單:
我的數據庫:CREATE TABLE `lecturers` (
`lecturer_id` BIGINT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NULL DEFAULT NULL,
`email` VARCHAR(255) NULL DEFAULT NULL,
`checker_id` BIGINT(20) NULL DEFAULT NULL,
PRIMARY KEY (`lecturer_id`),
FOREIGN KEY (`checker_id`) REFERENCES `lecturers` (`lecturer_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
我的模型
@Entity
@Table(name = "lecturers")
@Component
public class Lecturer implements Serializable{
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="checker_id")
private Lecturer checker;
@OneToMany(mappedBy="checker", orphanRemoval=true)
private List<Lecturer> lecturers = new ArrayList<Lecturer>();
}
表單上綁定了一個父對象(檢查),我想添加選擇列表中選擇並保存一個或更多的孩子。
保存工程,但它保存所有新的對象作爲孩子,並不保存檢查父母與檢查ID分開。我不確定問題是什麼,並想知道。
你說這樣可以節省所有的新對象作爲孩子......但如何才能做到這一點(這意味着他們有一個父從而爲'checker_id'的值)時,父(檢查)是不是也得救了嗎? – Mike 2013-04-22 19:26:13