實體:
package bi.one2many;import java.util.HashSet;import java.util.Set;public class Emperor {private int id;private String name;private Set<Minister> ministers = new HashSet<Minister>();public Emperor() {}public Emperor(int id, String name, Set<Minister> ministers) {super();this.id = id;this.name = name;this.ministers = ministers;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set<Minister> getMinisters() {return ministers;}public void setMinisters(Set<Minister> ministers) {this.ministers = ministers;}}package bi.one2many;public class Minister {private int id;private String name;private Emperor emperor;public Minister() {}public Minister(int id, String name, Emperor emperor) {super();this.id = id;this.name = name;this.emperor = emperor;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Emperor getEmperor() {return emperor;}public void setEmperor(Emperor emperor) {this.emperor = emperor;}}
hbm設定檔:
<hibernate-mapping><class name="bi.one2many.Emperor"><id name="id" column="did"><generator class="native" /></id><property name="name" type="string" column="name"></property><!-- confirure the uniredirection association --><set name="ministers" inverse="true" cascade="all"><key column="did" not-null="true"></key><one-to-many class="bi.one2many.Minister"/></set></class></hibernate-mapping><hibernate-mapping><class name="bi.one2many.Minister"><id name="id" column="mid"><generator class="native" /></id><property name="name" type="string" column="name"></property><many-to-one name="emperor" column="did" cascade="all"></many-to-one></class></hibernate-mapping>
測試檔案:
public class Test {@org.junit.Testpublic void testAdd() {SessionFactory sf = HibernateUtil.getSessionFactory();Session session = sf.getCurrentSession();session.beginTransaction();Minister m1 = new Minister();m1.setName("廉頗");Minister m2 = new Minister();m2.setName("藺相如");Emperor emperor = new Emperor();emperor.setName("齊威王");//emperor.getMinisters().add(m1);//session.save(emperor);m1.setEmperor(emperor);m2.setEmperor(emperor);session.save(m1);session.save(m2);session.beginTransaction().commit();}}
測試結果:
Hibernate: insert into Emperor (name) values (?)Hibernate: insert into Minister (name, did) values (?, ?)Hibernate: insert into Minister (name, did) values (?, ?)
在雙向關聯關係配置中有inverse屬性和cascade屬性比較讓人迷糊,不過參看一下這個文章寫得蠻清楚的:
Hibernate中的Inverse和cascade屬性配置
http://www.cnblogs.com/focusj/archive/2011/03/23/2057603.html。