2013-05-20 64 views
1

我想将一对多关系保存到数据库中。在这种情况下,一个父母和两个孩子。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。我想为父对象保存多个对象,并将值显示在数据库中。我想问我如何执行它?

回答

0

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

对于其他领域的填补,你必须填写它们。

+0

感谢您的回复。我修改了代码来进行争论。它不仅保存父母,而且保存具有相同ID的同一行中的孩子。这是一个错误。 – user2259555

相关问题