1.模型
一个用户拥有多个角色,一个角色拥有多个用户。
2.实体类(省略set,get方法)
public 
class User { 

private 
int id; 

private String name; 

private Set roles; 

}
public 
class Role { 

private 
int id; 

private String name; 

private Set users; 

}
3.数据模型
mysql> desc t_user;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
mysql> desc t_role;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
4.映射文件
User.hbm.xml
<
hibernate-mapping
> 

<
class 
name
="com.bjsxt.hibernate.User" 
table
="t_user"
> 

<
id 
name
="id"
> 

<
generator 
class
="native"
/> 

</
id
> 

<
property 
name
="name"
/> 

<
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.hbm.xml
<
hibernate-mapping
> 

<
class 
name
="com.bjsxt.hibernate.Role" 
table
="t_role"
> 

<
id 
name
="id"
> 

<
generator 
class
="native"
/> 

</
id
> 

<
property 
name
="name"
/> 

<
set 
name
="users" 
table
="t_user_role"
> 

<
key 
column
="roleid"
/> 

<
many-to-many 
class
="com.bjsxt.hibernate.User" 
column
="userid"
/> 

</
set
> 

</
class
> 

</
hibernate-mapping
> 

<key>中的column属性值必须等于单向关联中<many-to-many>标签指向的column的属性值
<many-to-many>中column属性值必须等于单向关联中<key>中column的属性值
5.测试
public 
class ManyToManyTest 
extends TestCase { 

//存储 

public 
void testSave(){ 

Session session = HibernateUtils.getSession(); 

Transaction tx = session.beginTransaction(); 

User user1 = 
new User(); 

user1.setName(
"yang9"); 

session.save(user1); 

User user2 = 
new User(); 

user2.setName(
"long1"); 

session.save(user2); 

Set<User> users = 
new HashSet<User>(); 

users.add(user1); 

users.add(user2); 

Role role1 = 
new Role(); 

role1.setName(
"凤山人在线"); 

role1.setUsers(users); 

session.save(role1); 

tx.commit(); 


//导入 

public 
void testLoad(){ 

Session session =HibernateUtils.getSession(); 

Transaction tx = session.beginTransaction(); 

Role role = (Role) session.load(Role.
class, 1); 

System.out.println(role.getName()); 

for(Iterator ite=role.getUsers().iterator();ite.hasNext();){ 

User user = (User) ite.next(); 

System.out.println(user.getName()); 


}