我总是需要明确设置子对象,同时节省Hibernate主对象 [英] Do i always need to explicitly set sub objects while saving Hibernate main Object
问题描述
我有类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屋!