2013-05-20 63 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

相關問題