<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ? ? ?今天來說說Hibernate中的多對多關聯映射,多對多關聯映射涉及到單向映射和雙向映射2種。 ? ? ?首先舉個多對多關聯例子:用戶User和角色Role,一個用戶可以屬于多個角色,一個角色可以有多個用戶。這就是典型的多對多關聯的例子。而單向關聯映射則是只能由A端去操作B端,B端不能操作A端的數據。而雙向關聯映射則是A,B兩端都可以操作另一端的數據。 ? ? 先說單向關聯映射,實體類如下: ~~~ /** * 學生類 * @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> ~~~ ? ? ?User類有Role的Set集合,而且映射文件中也設置了Set標簽和many-to-many標簽,所以可以通過User操作Role,但是卻不能從Role中操作數據。多對多的關系維護用到了第三張表t_user_role。它存放了User和Role的主鍵。 ? ? ?從上面的單向多對多關聯映射來看,我可以查某個用戶屬于哪些角色,但是卻不能查某個角色中有哪下用戶。所以為了解決這個問題,我們采用雙向關聯映射。 ? ? 其實說白了,雙向關聯映射就是在2端都設置一下映射關系。即在Role中同樣添加User的set集合: ~~~ /** * 班級類 * @author Longxuan * */ public class Role { private int id; private String name; private Set<User> users; //此處省略get和set方法 } ~~~ ? ? 映射文件中的Role部分也要做相應的修改: ~~~ <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> ~~~ ? ? ?值得注意的是,配置文件中的table和兩個column,都必須是一致的。否則肯定會出錯的。如果表名不一樣了,那么就會生成2張中間表,一張有User維護,一張有Role。因為它變成了2個多對多單向關聯映射。如果列名不一致了,就會出列來。還是變成了2個多對多單向關聯映射。同時數據也發生了冗余。 ? ? ?所以雙向關聯映射,一定要保證2端的映射關系都設置一致了。才能稱之為“雙向關聯映射”。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看