在保存Hibernate主对象时,我是否总是需要显式设置子对象

时间:2011-03-07 12:20:10

标签: java hibernate spring jpa binding

我有班主任

public Person() {
    //passports = new AutoPopulatingList<Passport>(Passport.class); 
    passports = new AutoPopulatingList<Passport>(new PassportFactory(this));
}


@Id
@Column(name = "PERSON_ID")
@GeneratedValue
 public Integer getId() {
  return id;
 }

@Column(name = "FIRST_NAME")
public String getFirstName() {
 return firstName;
}

@Column(name = "LAST_NAME")
public String getLastName() {
 return lastName;
}

@Column(name = "MONEY")
public Double getMoney() {
 return money;
}

@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="person")
@JoinColumn(name="person_id")
public List<Passport> getPassports(){
      return this.passports;
 }

班级护照

@Id
@Column(name = "passport_id")
@GeneratedValue
public Integer getPassport_id() {
    return passport_id;
}

@Column(name = "country_issue")
public String getCountry_issue() {
    return country_issue;
}


@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="person_id")
public Person getPerson(){
    return person;

}

这是双向的关系。

最初我像这样保存

session.save(person);

并没有将person_id保存在护照表中,然后有人告诉我这样做

for(Passport passport : person.getPassports())
      {
          passport.setPerson(person);
      }
 session.save(person);

这样做有用!!。

我的问题是,如果我使用ElementFactory并使用

在护照中设置person对象
public Object createElement(int index) {
    Passport passport = new Passport();
    passport.setPerson(person);
    return passport;

那为什么我必须再次明确地设置这个人

这是我在autopopulateList中使用的Passportfactory类

public class PassportFactory implements AutoPopulatingList.ElementFactory {
  private Person person;

  public PassportFactory(Person person) {
     this.person = person;
  }

  public Object createElement(int index) {
    Passport passport = new Passport();
    passport.setPerson(person);
    return passport;
  }
}

1 个答案:

答案 0 :(得分:0)

是的,双向关联由用户手动处理(就像你展示的那样)