我想将一对多的关系保存到数据库中。在这种情况下,一个父母和两个孩子。
DAO代码
public void createMatch() {
UserEntity checker = new UserEntity();
UserEntity setter = new UserEntity();
setter.setChecker(checker);
checker.addSetter(setter);
if (checker != null)
sessionFactory.getCurrentSession().persist(checker);
}
型号代码
public class UserEntity implements Serializable {
@ManyToOne(cascade={CascadeType.ALL})
@JoinColumn(name="checker_id")
private UserEntity checker;
@OneToMany(mappedBy="checker", orphanRemoval=true, cascade = CascadeType.ALL)
private Set<UserEntity> setters = new HashSet<UserEntity>();
// getters and setters
public void addSetter(UserEntity setter) {
if(setters == null) {
setters = new HashSet<UserEntity>();
}
setter.setChecker(this);
this.setters.add(setter);
}
JSP
后期处理控制器
@RequestMapping(value="/student", method = RequestMethod.POST)
public ModelAndView hello(@ModelAttribute("checker") UserEntity checker) {
userService.createMatch();
return new ModelAndView ("redirect:/admin");}
它保存的数据库:
CREATE TABLE `user` (
`user_id` INT(11) NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(45) NULL DEFAULT NULL ,
`checker_id` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`user_id`),
FOREIGN KEY (`checker_id`) REFERENCES `user` (`user_id`));
问题是为父节点保存了一个子节点,并且在保存它时,除了userId之外,所有字段都显示为null。我想为父项保留多个对象,并将值显示在数据库中。我想问一下如何实施它?
答案 0 :(得分:0)
您的hello()
方法将检查器作为参数,但完全忽略它。它调用createMatch()
,没有任何参数,这会保存一个包含空setter的空检查器。所以结果非常令人期待。
对于要填写的其他字段,您必须填写它们。