通常為了實現entity class的雙向association,每添加一組實例在java中需要兩行代碼:
persion.getAddresses().add(address);
address.getPersons().add(person);
但對Hibernate而已,上面的代碼會被轉化為兩條insert語句,
為了避免這樣的情況出現需要定義inverse屬性,告訴Hibernate persion和address之間的關系:
// !file: Person.class
public class Person {
// ...
@ManyToMany(
targetEntity= Address.class,
cascade = CascadeType.ALL,
)
@JoinTable(
name="persion_address",
joinColumns= {@JoinColumn(name="person_id")},
inverseJoinColumns= {@JoinColumn(name="address_id")}
)
private Set<Address> adressses = new HashSet<Address> (0);
// ...
}
// !file: Address.class
public class Address {
// ...
@ManyToMany(
targetEntity= Persion.class,
cascade = CascadeType.ALL,
mappedBy = "addresses"
)
private Set<Person> persons = new HashSet<Person>();
// ...
}
上面的兩個annotation告訴Hibernate,Person是主,對Address中persons屬性的修改將不會產生SQL語句。
Hibernate里,如果是Many-to-many的關系,可以任意設置主class。
通常,還可以將添加刪除關系的代碼包裝起來:
// !file: Person.class
public class Person {
// ...
public void addAddress(Address address) {
this.getAddresses().add(address);
address.getPersons().add(this);
}
public void removeAddress(Address address) {
this.getAddresses().remove(address);
address.getPersons().remove(this);
}
//...
}
posted on 2007-03-27 21:18
hijeff 閱讀(354)
評論(0) 編輯 收藏 所屬分類:
Hibernate