1、实体
package per.jerry.hibernate.ManyManyBothRel;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
public class User {
private int id;
private String name;
private String addr;
private Date createTime;
private Set<Role> roleSet = new HashSet();
/**
* @return the id
*/
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the addr
*/
public String getAddr() {
return addr;
}
/**
* @param addr the addr to set
*/
public void setAddr(String addr) {
this.addr = addr;
}
/**
* @return the createTime
*/
public Date getCreateTime() {
return createTime;
}
/**
* @param createTime the createTime to set
*/
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
/**
* @return the roleSet
*/
public Set<Role> getRoleSet() {
return roleSet;
}
/**
* @param roleSet the roleSet to set
*/
public void setRoleSet(Set<Role> roleSet) {
this.roleSet = roleSet;
}
}
package per.jerry.hibernate.ManyManyBothRel;
import java.util.HashSet;
import java.util.Set;
public class Role {
private int id;
private String name;
private String code;
private Set<User> userSet = new HashSet();
/**
* @return the id
*/
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the code
*/
public String getCode() {
return code;
}
/**
* @param code the code to set
*/
public void setCode(String code) {
this.code = code;
}
/**
* @return the userSet
*/
public Set<User> getUserSet() {
return userSet;
}
/**
* @param userSet the userSet to set
*/
public void setUserSet(Set<User> userSet) {
this.userSet = userSet;
}
}
2、配置文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="per.jerry.hibernate.ManyManyBothRel.Role" table="J_ROLE">
<id name="id" type="int">
<column name="ID" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<property name="code" type="java.lang.String">
<column name="CODE" />
</property>
<set name="userSet" table="J_USER_ROLE_REL" inverse="true">
<key>
<column name="role_id" />
</key>
<many-to-many class="per.jerry.hibernate.ManyManyBothRel.User" column="user_id" />
</set>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="per.jerry.hibernate.ManyManyBothRel.User" table="J_USER">
<id name="id" type="int">
<column name="ID" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<property name="addr" type="java.lang.String">
<column name="ADDR" />
</property>
<property name="createTime" type="java.util.Date">
<column name="CREATETIME" />
</property>
<!-- table="J_USER_ROLE_REL" 中间表 -->
<set name="roleSet" table="J_USER_ROLE_REL" cascade="all">
<!-- 通过key字段告诉hibernate在中间表里面查询user_id值相应的user记录 -->
<key>
<column name="user_id" />
</key>
<!-- 通过column字段告诉hibernate对role表中查找role_id值相就的role记录 -->
<many-to-many class="per.jerry.hibernate.ManyManyBothRel.Role" column="role_id"/>
</set>
</class>
</hibernate-mapping>
3、测试类
package per.jerry.hibernate.ManyManyBothRel;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import per.jerry.hibernate.ManyManyBothRel.User;
public class TestManyManyBothRel {
Session session ;
@Before
public void before(){
SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
session = sessionFactory.getCurrentSession();
session.beginTransaction();
}
@After
public void after(){
session.getTransaction().commit();
}
@Test
public void test() {
User u1 = new User();
u1.setAddr("北京海淀");
u1.setCreateTime(new Date());
u1.setName("Jerry");
User u2 = new User();
u2.setAddr("北京昌平");
u2.setCreateTime(new Date());
u2.setName("Tom");
User u3 = new User();
u3.setAddr("北京朝阳");
u3.setCreateTime(new Date());
u3.setName("Allen");
Role r1 = new Role();
r1.setCode("admin");
r1.setName("管理员");
Role r2 = new Role();
r2.setCode("guest");
r2.setName("游客");
Role r3 = new Role();
r3.setCode("test");
r3.setName("测试");
u1.getRoleSet().add(r1);
u1.getRoleSet().add(r2);
u2.getRoleSet().add(r2);
u2.getRoleSet().add(r3);
r1.getUserSet().add(u1);
r2.getUserSet().add(u1);
r2.getUserSet().add(u2);
r3.getUserSet().add(u3);
session.save(u1);
session.save(u2);
session.save(u3);
}
}