今天來講說Hibernate中的多對多關聯映射,多對多關聯映射涉及到單向映射和雙向映射2種。html
首先舉個多對多關聯例子:用戶User和角色Role,一個用戶能夠屬於多個角色,一個角色能夠有多個用戶。這就是典型的多對多關聯的例子。而單向關聯映射則是隻能由A端去操做B端,B端不能操做A端的數據。而雙向關聯映射則是A,B兩端均可以操做另外一端的數據。java
先說單向關聯映射,實體類以下:node
/** * 學生類 * @author Longxuan * */ public class User { private int id; private String name; private Set<Role> roles; //此處省略get和set方法 } /** * 班級類 * @author Longxuan * */ public class Role { private int id; private String name; //此處省略get和set方法 }
<?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 package="com.bjpowernode.hibernate"> <class name="User" table="t_user"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <set name="roles" table="t_user_role"> <key column="user_id"></key> <many-to-many class="Role" column="roleid"></many-to-many> </set> </class> <class name="Role" table="t_role"> <id name="id"> <generator class="native"/> </id> <property name="name"/> </class> </hibernate-mapping>
從上面的單向多對多關聯映射來看,我能夠查某個用戶屬於哪些角色,可是卻不能查某個角色中有哪下用戶。因此爲了解決這個問題,咱們採用雙向關聯映射。app
其實說白了,雙向關聯映射就是在2端都設置一下映射關係。即在Role中一樣添加User的set集合:spa
/** * 班級類 * @author Longxuan * */ public class Role { private int id; private String name; private Set<User> users; //此處省略get和set方法 }
<class name="Role" table="t_role"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <set name="users" table="t_user_role"> <key column="roleid"></key> <many-to-many class="User" column="user_id"></many-to-many> </set> </class>
因此雙向關聯映射,必定要保證2端的映射關係都設置一致了。才能稱之爲「雙向關聯映射」。.net
版權聲明:本文爲博主原創文章,未經博主容許不得轉載。hibernate