多對多轉化一對多

來源:互聯網
上載者:User

標籤:os   io   檔案   問題   cti   代碼   sp   new   on   

1、由問題引出一個多對多拆分成兩個多對一

    問題:Hibernate 關聯映射 之 多對多 關聯(一)中中間表只是一個存放使用者和角色的表,並無其他作用,如果客戶有其他的需求,該表就無法擴充。

 

2、問題解決過程:

使用者、角色 之間的關係拆分成使用者和使用者角色、角色和使用者角色的關係,即:兩個多對一的關係。

小技巧:如何去判斷多對一還是一對多個物件,要從對象的角度來看,即:從一個對象的角度去看另一個對象。

使用者:

public class User {

 

        private int id;

        private String name;

        private String password;

        private Set<UserRole> roles;

使用者設定檔:

<hibernate-mapping>

        <class name="com.shangxuetang.User" table="t_user">

               <id name="id">

                       <generator class="native"/>

               </id>

               <property name="name"></property>

               <property name="password"></property>

               <set name="roles">

                   <key column="userID"></key>

                   <one-to-many class="com.shangxuetang.UserRole"/>

               </set>

        </class>

</hibernate-mapping>

角色:

public class Role {

        private int id;

        private String name;

        private Set<UserRole> users;

角色設定檔:

<hibernate-mapping>

        <class name="com.shangxuetang.Role" table="t_role">

               <id name="id">

                       <generator class="native"/>

               </id>

               <property name="name"></property>

               <set name="users">

                    <key column="roleID"></key>

                    <one-to-many class="com.shangxuetang.UserRole"/>

               </set>

        </class>

</hibernate-mapping>

使用者角色:

public class UserRole {

 

        private int id;

        private User user;

        private Role role;

        private Date assignTime;

       

        public UserRole() {}

        public UserRole(User u,Role r) {

               this.user = u;

               this.role = r;

               this.assignTime = new Date();

        }

使用者角色設定檔:

<hibernate-mapping>

        <class name="com.shangxuetang.UserRole" table="t_userrole">

               <id name="id">

                       <generator class="native"/>

               </id>

               <property name="assignTime" type="date"></property>

               <many-to-one name="user" column="userID"></many-to-one>

               <many-to-one name="role" column="roleID"></many-to-one>

              

        </class>

</hibernate-mapping>

測試範例程式碼:

public void  testManytoManyChaiFen() {

               Session session = HibernateUtil.getSession();

               try {

                       session.beginTransaction();

                      

                       User u1 = new User("zhangsan");

                       session.save(u1);

                       User u2 = new User("lisi");

                       session.save(u2);

                      

                       Role r1 = new Role("adminstor");

                       session.save(r1);

                       Role r2 = new Role("usualuser");

                       session.save(r2);

                       Role r3 = new Role("VIPuser");

                       session.save(r3);

                      

                       UserRole ur1 = new UserRole(u1,r1);

                       session.save(ur1);

                      

                       UserRole ur2 = new UserRole(u1,r2);

                       session.save(ur2);

                      

                       UserRole ur3 = new UserRole(u2,r1);

                       session.save(ur3);

                      

                       UserRole ur4 = new UserRole(u2,r3);

                       session.save(ur4);

                      

                       UserRole ur5 = new UserRole(u2,r2);

                       session.save(ur5);

                      

                       session.getTransaction().commit();

               }catch(Exception e) {

                       e.printStackTrace();

                       session.getTransaction().rollback();

               }finally {

                       session.close();

               }

        }

 

多對多轉化一對多

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.