Hibernate关联关系配置-----基于连接表的双向一对多/多对一映射配置
实体:
package bi.one2many.jointable; 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.jointable; 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.jointable.Emperor"> <id name="id" column="eid"> <generator class="native" /> </id> <property name="name" type="string" column="name"></property> <!-- confirure the uniredirection association --> <set name="ministers" table="emperorminister" inverse="true" > <key column="eid" not-null="true"></key> <many-to-many column="mid" unique="true" class="bi.one2many.jointable.Minister"/> </set> </class> </hibernate-mapping> <hibernate-mapping> <class name="bi.one2many.jointable.Minister"> <id name="id" column="mid"> <generator class="native" /> </id> <property name="name" type="string" column="name"></property> <join table="emperorminister" optional="true" > <key column="mid"></key> <many-to-one name="emperor" column="eid" not-null="true"></many-to-one> </join> </class> </hibernate-mapping>
测试文件:
public class Test { @org.junit.Test public 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); //emperor.getMinisters().add(m2); m1.setEmperor(emperor); m2.setEmperor(emperor); session.save(emperor); session.save(m1); session.save(m2); session.beginTransaction().commit(); } }
测试结果:
Hibernate: insert into Emperor (name) values (?) Hibernate: insert into Minister (name) values (?) Hibernate: insert into emperorminister (eid, mid) values (?, ?) Hibernate: insert into Minister (name) values (?) Hibernate: insert into emperorminister (eid, mid) values (?, ?)