Hibernate关系映射简介 Hibernate关系映射备忘录,以下为一对一 一对多 多对多 映射xml文件的简单记录 一对多映射 使用的表:Customers表 ID Name Orders表 ID Customer_ID Order_Number //orders中的Customer_ID作为外键使用。 单向映射文件 ********************Customers表********************************** <hibernate-mapping> <class name="GT.Cutstomer" table="Customers"> <id name="id" type="long" column="ID"> <generator class="increment"/> </id> <property name="Name" type="string"> <column name="Name" legnth="15"> <property/> </class> </hibernate-mapping> ********************Orders表********************************** <hibernate-mapping> <class name="GT.Order" table="Orders"> <id name="id" type="long" column="ID"> <generator class="increment"/> </id> <property name="OrderNumber" type="string"> <column name="Order_Number" legnth="15"> <property/> <many-to-one name="customer" column="Customer_ID" class="GT.Customer" not-null="true" /> </class> </hibernate-mapping> 双向映射文件 ********************Customers表********************************** <hibernate-mapping> <class name="GT.Cutstomer" table="Customers"> <id name="id" type="long" column="ID"> <generator class="increment"/> </id> <property name="Name" type="string"> <column name="Name" legnth="15"> <property/> <set name="orders" cascade="" inverse="true"> <key column="Customer_ID"/> </set> </class> </hibernate-mapping> //双向关联中,set中的inverse 属性表明此端(customer)的关联只是order端的镜像,当探测到customer和order同时发生变化时,仅按照order端来同步数据库 ********************Orders表********************************** <hibernate-mapping> <class name="GT.Order" table="Orders"> <id name="id" type="long" column="ID"> <generator class="increment"/> </id> <property name="OrderNumber" type="string"> <column name="Order_Number" legnth="15"> <property/> <many-to-one name="customer" column="Customer_ID" class="GT.Customer" not-null="true" /> </class> </hibernate-mapping> 一对一映射 Hibernate提供了两种一对一关联映射的方法:按照外键映射,按照主键映射。且这里说的是双向映射 按照外键映射 使用的表 Customers表 ID Name Home_Address_Id Com_Address_Id Addresses表 ID City ..... ********************Customers表********************************** <hibernate-mapping> <class name="GT.Cutstomer" table="Customers"> <id name="id" type="long" column="ID"> <generator class="increment"/> </id> <property name="Name" type="string"> <column name="Name" legnth="15"> <property/> <many-to-one name="homeAddress" class="GT.Address" column="Home_Address_ID" unique="true" /> <many-to-one name="comAddress" class="GT.Address" column="Com_Address_ID" unique="true" /> </class> </hibernate-mapping> Address.hbm.xml文件中,用<one-to-one>来映射Address类的customer属性 ........................ <one-to-one name="Customer" class="GT.Customer" property-ref = "homeAddress" /> ........................ 按照主键映射 使用的表 Customers表 ID Name Addresses表 ID City ..... Customer.hbm.xml文件中 ********************Customers表********************************** ................ <one-to-one name="address" class="GT.address" cascade="all"/> ....................... ********************Address表********************************** Address.hbm.xml文件中 ....................... <one-to-one name="customer" class="GT.customer" constrained="true"/> 表明address的主键同时作为外间使用 ....................... 多对多映射 使用的表 Category表 ID Name Items表 ID Name Base_Price Category_Item表 Catetory_ID Item_ID 单向映射 ********************Category表********************************** Category.hbm.xml文件中 ......................... <set name="items" talbe="Category_Item" lazy="true" cascade="save-update" <key column="Category_ID"/> <many-to-many class"GT.Item" column="Item_ID"/> </set> ..................... 双向映射 ********************Category表********************************** Category.hbm.xml文件中 ......................... <set name="items" talbe="Category_Item" lazy="true" cascade="save-update" <key column="Category_ID"/> <many-to-many class"GT.Item" column="Item_ID"/> </set> ......................... ********************Item表********************************** Item.hbm.xml文件中 ......................... <set name="categories" talbe="Category_Item" lazy="true" inverse="true" cascade="save-update" <key column="Item_ID"/> <many-to-many class"GT.Category" column="Category_ID"/> </set>