1:User类:

public class User {

private int id;
private String name;
private Set roles;
public Set getRoles() {
return roles;
} public void setRoles(Set roles) {
this.roles = roles;
} 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;
}
}
2:Role类
public class Role {

private int id;
private String name;
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;
}
}3:配置文件
User的配置文件为:
<hibernate-mapping >
<class name="com.bjsxt.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"></property>
<set name="roles" table="t_user_role">
<key column="userid"/>
<many-to-many class="com.bjsxt.hibernate.Role" column="roleid"/>
</set>
</class>
</hibernate-mapping>Role的配置文件为:
<hibernate-mapping >
<class name="com.bjsxt.hibernate.Role" table="t_role">
<id name="id">
<generator class="native"/>
</id>
<property name="name"></property>
</class>
</hibernate-mapping>
4:测试程序为
//首先保存Role,然后根据Role来保存User
public void testSave1(){
Session session = null; try{
session = HibernateUtils.getSession();
session.beginTransaction();

Role r1 = new Role();
r1.setName("数据录入人员");
session.save(r1);

Role r2 = new Role();
r2.setName("商务主管");
session.save(r2);

Role r3 = new Role();
r3.setName("大区经理");
session.save(r3);

User u1 = new User();
u1.setName("10");
Set u1Roles = new HashSet();
u1Roles.add(r1);
u1Roles.add(r2);
u1.setRoles(u1Roles);

User u2 = new User();
u2.setName("ww");
Set u2Roles = new HashSet();
u2Roles.add(r2);
u2Roles.add(r3);
u2.setRoles(u2Roles);

User u3 = new User();
u3.setName("jj");
Set u3Roles = new HashSet();
u3Roles.add(r1);
u3Roles.add(r2);
u3Roles.add(r3);
u3.setRoles(u3Roles);

session.save(u1);
session.save(u2);
session.save(u3);

session.getTransaction().commit();

}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
//首先加载User,再根据User加载它所属的Role
public void testLoad1(){
Session session = null;
try{
session = HibernateUtils.getSession();
session.beginTransaction();

User user = (User)session.load(User.class,1);
System.out.println("User.name:"+user.getName());

for(Iterator itar = user.getRoles().iterator();itar.hasNext();){
Role role = (Role)itar.next();
System.out.println("Role.name="+role.getName());
}
session.getTransaction().commit();

}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
5:总结hibernate多对多关联映射(单向User----->Role)
具体映射方式:
<set name="roles" table="t_user_role">
<key column="userid"/>
<many-to-many class="com.bjsxt.hibernate.Role" column="roleid"/>
</set>