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 (?, ?)

浙公网安备 33010602011771号