架構師之路

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            4 Posts :: 0 Stories :: 1 Comments :: 0 Trackbacks

          所有配置文件都要放在classes下面

          一:創建hibernate.cfg.xml文件,內容如下:
          <?xml version='1.0' encoding='utf-8'?>
          <!DOCTYPE hibernate-configuration
              PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
              "
          http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">

          <hibernate-configuration>
              <session-factory>
                  <property name="connection.datasource">java:comp/env/note</property> 連接池用,如在TOMCAT里配置連接池。
                  <property name="show_sql">true</property>
                  <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property> 如果使用mysql就這樣,如果是其他就根據hi..property文件配置

                  <!-- Mapping files -->
                  <mapping resource="User.hbm.xml"/>
            <mapping resource="Passwd.hbm.xml"/>  這里是需要映射的hbm文件
              </session-factory>
          </hibernate-configuration>

          二: One-To-One關系
          1):主表的hbm.xml文件應該加:
            <one-to-one name="passwd" class="web.model.vo.passwdBean"  cascade="save-update"/> #class是子表的類
          2):子表的hbm.xml文件如下:
            <one-to-one name="user" class="web.model.vo.userBean" constrained="true" /> #class是主表的
          3):每個bean都要有get,set各自的子類和主類.
          4):在調用的時候執行:
               user.setPasswd(passwd);
               passwd.setUser(user);
               session.save(user); //只需要保存主類
              
           三:many-to-one關系(單向關聯)
           1):多數據這邊一定要多一個字段好關聯主表ID,比如一個房間對多個學生:
           room表:id,address
           student表:id,name,pid(這個字段關聯room表的id),pid必須為可以為空
           2):在student.hbm.xml的關系為:
           <many-to-one name="room"  column="pid"  class="web.model.vo.RoomBean" cascade="save-update/>
              如果設置了cascade(聯級持久)那么只需要save(student) 而不用save(room)了,這表示當我們插入或更新Student時,自動對其所關聯到的Room進行持久化
              在student.hbm.xml里不能寫進pid的描述
             
           4):在room.hbm.xml里只需要設置字段對應的屬性而已,如果用了cascade,必須在:
            <id name="id" column="id" unsaved-value="0"> 這里加個unsaved-value="0",不然會出如下錯誤:
             javax.servlet.ServletException: a different object with the same identifier value was already associated with the session: 0,
             of class: web.model.vo.RoomBean
           3):在測試里,先保存主類(room,也就是one這方),在保存many這方。
           4):在studentBean中不需要pid的set,get方法,而需要一個對主類的set,get,如:setRoom(RoomBean xx),getRoom()


           四:many-to-one關系(雙向關聯)
           1):在one(student)這方加入set,比如setStudents(Set x),getStudents();
           2):在many(room)的room.hbm.xml為:
             <set name="user" table="user" inverse="true" cascade="all"> 這里inverse一定要為true,意思是關聯由對方(student)維護;
                      <key column="pid"/>
                      <one-to-many class="web.model.vo.UserBean"/>
             </set>
             注意這兩個hbm.xml的ID處都必須加上unsaved-value="0"
           3)客戶端程序改為:
                          RoomBean room1 = new RoomBean();
            room1.setAddress("chengdu");  
            
            UserBean user = new UserBean();
            user.setName("raoqn");
            
            UserBean user2 = new UserBean();
            user2.setName("liping");
            
            UserBean user3 = new UserBean();
            user3.setName("yrq");

            user.setRoom(room1);  //這里由于關系由user類維護,所以必須setRoom
            user2.setRoom(room1);
            user3.setRoom(room1);
            
            room1.getUser().add(user);
            room1.getUser().add(user2);
            room1.getUser().add(user3);
            
            session.save(room1); //只需要保存room1就搞定一切,不用每個對象都save了

           

          posted on 2005-12-20 16:20 月-風 閱讀(859) 評論(1)  編輯  收藏 所屬分類: hibernate

          Feedback

          # re: Hibernate學習筆記 2006-10-02 11:57 都市雛鷹
          我遇見一種many -to-one雙向關聯:
          報出這樣錯誤:a different object with the same identifier value was already associated with the session
          ,后來發現沒有建立雙指向:
          就是
          one.setMany(many)沒有建立many.getXXX().add(one).
          但是并沒有設置:unsaved-value="0"

            回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 沐川县| 乐山市| 漾濞| 博白县| 灵川县| 兰坪| 鄄城县| 兴海县| 西乌珠穆沁旗| 肃宁县| 嫩江县| 扶余县| 睢宁县| 海城市| 交口县| 灵丘县| 呼玛县| 镶黄旗| 融水| 麻栗坡县| 重庆市| 新乡县| 呼玛县| 体育| 桂平市| 海城市| 牟定县| 漯河市| 黄浦区| 郁南县| 闻喜县| 宜都市| 民丰县| 九台市| 兰考县| 沙坪坝区| 新竹市| 福清市| 泉州市| 偃师市| 古田县|