1.模型 一个用户拥有多个角色,一个角色拥有多个用户。 2.实体类(省略set,get方法)
public class User {
private int id;
private String name;
private Set roles;
}
private int id;
private String name;
private Set roles;
}
public class Role {
private int id;
private String name;
private Set users;
}
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 >
< 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 >
< 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());
}
}
//存储
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());
}
}