单向 user对应多个role
在user这一对设置set集合
set里面 创一个关系表 关系表中创一个外键 userid 指向user
加一个列roleid指向 role
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="hibernate.belle.User" table="t_user">
<id name="id" >
<generator class="native"></generator>
</id>
<property name="name" column="username"/>
<set name="roles" table="t_user_role">
<key column="userid" > </key>
<many-to-many class="hibernate.belle.Role" column="role_id" ></many-to-many>
</set>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="hibernate.belle.User" table="t_user">
<id name="id" >
<generator class="native"></generator>
</id>
<property name="name" column="username"/>
<set name="roles" table="t_user_role">
<key column="userid" > </key>
<many-to-many class="hibernate.belle.Role" column="role_id" ></many-to-many>
</set>
</class>
</hibernate-mapping>
package hibernate.belle;
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;
}
}
package hibernate.belle;
import java.util.Set;
public class User {
private int id;
private String name;
private Set 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;
}
public Set getRoles() {
return roles;
}
public void setRoles(Set roles) {
this.roles = roles;
}
}
测试存储和load
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.hibernate.Session;
import hibernate.belle.HibernateUtils;
import hibernate.belle.Role;
import hibernate.belle.User;
import junit.framework.TestCase;
public class ManytoMany extends TestCase{
public void test(){
Session session= null;
try{
session=HibernateUtils.getSession();
session.beginTransaction();
Role role1=new Role();
Role role2=new Role();
role1.setName("manager");
role2.setName("skillmanager");
session.save(role1);
session.save(role2);
Set u1_roleset=new HashSet();
u1_roleset.add(role1);
u1_roleset.add(role2);
User user1=new User();
User user2=new User();
user1.setRoles(u1_roleset);
user1.setName("Edward");
session.save(user1);
session.beginTransaction().commit();
}catch(Exception e)
{
session.beginTransaction().rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
public void testload(){
Session session=null;
try{
session=HibernateUtils.getSession();
session.beginTransaction();
Set roles=new HashSet();
User user1=(User)session.load(User.class, 3);
roles=user1.getRoles();
for(Iterator iter=roles.iterator();iter.hasNext();)
{
Role role=(Role)iter.next();
System.out.println(role.getName());
}
session.beginTransaction().commit();
}catch(Exception e)
{
session.beginTransaction().rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
}
“`