Spring Hibernate - 保存一对多关联

时间:2013-05-20 14:28:00

标签: spring hibernate

我想将一对多的关系保存到数据库中。在这种情况下,一个父母和两个孩子。

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。我想为父项保留多个对象,并将值显示在数据库中。我想问一下如何实施它?

1 个答案:

答案 0 :(得分:0)

您的hello()方法将检查器作为参数,但完全忽略它。它调用createMatch(),没有任何参数,这会保存一个包含空setter的空检查器。所以结果非常令人期待。

对于要填写的其他字段,您必须填写它们。