我总是需要明确设置子对象,同时节省Hibernate主对象 [英] Do i always need to explicitly set sub objects while saving Hibernate main Object

查看:146
本文介绍了我总是需要明确设置子对象,同时节省Hibernate主对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有类Person

 公众人物(){
    //护照=新AutoPopulatingList<&护照GT;(Passport.class);
    护照=新AutoPopulatingList<&护照GT;(新PassportFactory(本));
}
@ID
@Column(NAME =PERSON_ID)
@GeneratedValue
 公共整数的getId(){
  返回ID;
 }@Column(NAME =FIRST_NAME)
公共字符串的getFirstName(){
 返回的firstName;
}@Column(NAME =LAST_NAME)
公共字符串getLastName(){
 返回lastName的;
}@Column(NAME =钱)
公共双getMoney(){
 拾金不昧;
}@OneToMany(的cascade = CascadeType.ALL,取= FetchType.LAZY,的mappedBy =人)
@JoinColumn(NAME =为person_id)
公开名单<&护照GT; getPassports(){
      返回this.passports;
 }

类护照

  @Id
@Column(NAME =passport_id)
@GeneratedValue
公共整数getPassport_id(){
    返回passport_id;
}@Column(NAME =country_issue)
公共字符串getCountry_issue(){
    返回country_issue;
}
@ManyToOne(取= FetchType.LAZY)
@JoinColumn(NAME =为person_id)
公众人物getPerson(){
    返回的人;}

这是双向定向一对多的关系。

起初我节省了这样

  session.save(人);

和它未在护照表保存为person_id,然后有人告诉我做这个

 为(护照护照:person.getPassports())
      {
          passport.setPerson(人);
      }
 session.save(人);

通过这样做,它的工作!

我的问题是,如果我使用ElementFactory和设置在那里的护照人员对象以

 公开对象的createElement(INT指数){
    护照护照=新护照();
    passport.setPerson(人);
    返回护照;

那么,为什么我一定要明确设置赤贫的人再次

这是我正在使用的autopopulateList类Passportfactory

 公共类PassportFactory实现AutoPopulatingList.ElementFactory {
  私募人士的人;  公共PassportFactory(人人){
     this.person =人;
  }  公共对象的createElement(INT指数){
    护照护照=新护照();
    passport.setPerson(人);
    返回护照;
  }
}


解决方案

是的,双向关联由用户(就像你教)手工处理

I have Class Person

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;
 }

Class Passport

@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;

}

It is bi directional onetomany relationship.

Initially i was saving like this

session.save(person);

and it was not saving person_id in passport table , then someone told me to do this

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

By doing that it worked!!.

My question was that if i am using ElementFactory and setting the person object in passport there with

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

Then why i have to explicitly set the person abject again

This the Passportfactory class which i am using in autopopulateList

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;
  }
}

解决方案

Yes, bidirectional associations are handled manually by the user (just like you showed)

这篇关于我总是需要明确设置子对象,同时节省Hibernate主对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆