1

1 対多の関係をデータベースに保存したいと考えています。この場合、1 人の親と 2 人の子供です。

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`));

問題は、親に対して 1 つの子が保存され、それが保存されると、userId を除いてすべてのフィールドが null として表示されることです。親に対して複数のオブジェクトを保持し、値をデータベースに表示したいと考えています。私はそれをどのように実装するのですか?

4

1 に答える 1

0

メソッドhello()は引数としてチェッカーを取りますが、それを完全に無視します。引数なしで を呼び出しcreateMatch()、空のセッターを含む空のチェッカーを保存します。したがって、結果はかなり期待されます。

他のフィールドに入力するには、入力する必要があります。

于 2013-05-20T14:32:57.630 に答える