所有配置文件都要放在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了