多對多映射是我在之前所說的映射裏邊稍微複雜的,但是理解起來也是相當容易的。如下圖:
只需要藉助一張表作爲中介,管理User 和 Role 之間的關係即可。這樣,一個用戶可以擁有多個角色,一個角
色可以對應多個用戶。
看看代碼如何實現,新建User實體類對象:
package com.bjpowernode.hibernate;
import java.util.Set;
public class User {
private int id;
private String name;
private Set role;
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 getRole() {
return role;
}
public void setRole(Set role) {
this.role = role;
}
}
配置User.hbm.xml映射文件:
<?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="com.bjpowernode.hibernate.User" table="t_user" >
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="role" table="t_user_role">
<key column="user_id"/>
<many-to-many class="com.bjpowernode.hibernate.Role" column="role_id"/>
</set>
</class>
</hibernate-mapping>
新建Role實體對象:
package com.bjpowernode.hibernate;
import java.util.Set;
/**
* 建立User實體類
* @author why_768
*
*/
public class Role {
private int id;
private String name;
private Set users;
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 getUsers() {
return users;
}
public void setUsers(Set users) {
this.users = users;
}
}
配置Role.hbm.xml映射文件:
<?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="com.bjpowernode.hibernate.Role" table="t_role">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="users" table="t_user_role">
<key column="role_id"/>
<many-to-many class="com.bjpowernode.hibernate.User" column="user_id"/>
</set>
</class>
</hibernate-mapping>
新建數據庫,導出的數據庫表,將會生成第三張關聯表:t_user_role:
建立Junit測試類保存數據:
public void testSave1(){
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
Role role1 = new Role();
role1.setName("Zj's Family");
session.save(role1);
Role role2 = new Role();
role2.setName("Master");
session.save(role2);
Set roles = new HashSet();
roles.add(role1);
roles.add(role2);
User user1 = new User();
user1.setName("Yana");
user1.setRole(roles);
session.save(user1);
User user2 = new User();
user2.setName("XLB");
user2.setRole(roles);
session.save(user2);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
} finally{
HibernateUtils.closeSession(session);
}
}
查看數據庫數據:
到這裏,Hibernate的相關映射關係小編就總結的差不多了,嘻嘻~~~