hibernate映射关系


------------------------------------------单向多对一-----------------------------------------------------------------


Customer  
 private Integer id;
   private String name
Order
 private Integer id;
 private String name;
 private Customer cust


映射:
Customer.hbm.xml:
<class name="Customer" table="CUSTOMER_TABLE">
 
  <id name="id" column="ID" type="integer">
   <generator class="native"></generator>
  </id>
  
  <property name="name" column="NAME" type="string" length="30"/>
 
 </class>
</>
Order.hbm.xml:
 <class name="Order" table="ORDER_TABLE">
  
  <id name="id" column="ID" type="integer">
   <generator class="native"></generator>
  </id>
  
  <property name="orderNumber" column="ORDER_NUMBER" type="string" length="30"/>
 
  <!--
   映射 Order 类的 cust 属性, 其中 Customer 类中有  ID 属性, 是一个持久化类
   单项多对一: 生成的外键在多对应数据表中, 是一端的外键
  -->
  <many-to-one name="cust" class="Customer" column="CUSTOMER_ID"/>
 
 </class>
---------------------------------------单向一对多--------------------------------------------------------------

Customer  
 private Integer id;
   private String name
 private Set<Order> order = HashSet<Order>();
Order
 private Integer id;
 private String name;


Customer.hbm.xml:
<class name="Customer" table="CUSTOMER_TABLE">
 
  <id name="id" column="ID" type="integer">
   <generator class="native"></generator>
  </id>
  
  <property name="name" column="NAME" type="string" length="30"/>
  
  <!-- 映射 Set 属性, 一对多 -->
  <set name="orders" table="ORDER_TABLE">
   
   <!-- 在 ORDER_TABLE 中生成一个外键, 来标识 ORDER_TABLE 中的记录属于哪个 Customer 对象 -->
   <key column="CUSTOMER_ID"></key>
   
   <!-- 在 ORDER_TABLE 表中放入的是什么类型的数据 -->
   <one-to-many class="Order"/>
   
  </set>
 
 </class>
Order.hbm.xml:
 <class name="Order" table="ORDER_TABLE">
  
  <id name="id" column="ID" type="integer">
   <generator class="native"></generator>
  </id>
  
  <property name="orderNumber" column="ORDER_NUMBER" type="string" length="30"/>
 
  <!--
   映射 Order 类的 cust 属性, 其中 Customer 类中有  ID 属性, 是一个持久化类
   单项多对一: 生成的外键在多对应数据表中, 是一端的外键
  -->
  <many-to-one name="cust" class="Customer" column="CUSTOMER_ID"/>
 
 </class>


----------------------------------------------------双向多对一。一对多(一样).------------------------------------------------------

Customer  
 private Integer id;
   private String name
 private Set<Order> order = HashSet<Order>();
Order
 private Integer id;
 private String name;
 private Customer cust;
映射:
Customer.hbm.xml:
 <class name="Customer" table="CUSTOMER_TABLE">
 
  <id name="id" column="ID" type="integer">
   <generator class="native"></generator>
  </id>
  
  <property name="name" column="NAME" type="string" length="30"/>
 
  <!-- 
   inverse: 指定由哪一方来维护关联关系, 若 inverse="true", 表示由对方来维护关联关系
  -->
  <set name="orders" table="ORDER_TABLE" inverse="true" order-by="ORDER_NUMBER ASC">
   <key column="CUSTOMER_ID"></key>
   <one-to-many class="Order"/>
  </set>
 
 </class>
Order.hbm.xml:
<class name="Order" table="ORDER_TABLE" dynamic-insert="true">
  
  <id name="id" column="ID" type="integer">
   <generator class="native"></generator>
  </id>
  
  <property name="orderNumber" column="ORDER_NUMBER" type="string" length="30"/>
 
  <!--
   映射 Order 类的 cust 属性, 其中 Customer 类中有  ID 属性, 是一个持久化类
   单项多对一: 生成的外键在多对应数据表中, 是一端的外键
  -->
  <many-to-one name="cust" class="Customer" column="CUSTOMER_ID" not-null="true"/>
 
 </class>

----------------------------------------------------单向多对多------------------------------------------------------
Category:
 private Integer id;
 
 private String categoryName;
 
 private Set<Item> items = new HashSet<Item>();

Item:
 private Integer id;
 
 private String itemName;
映射:
Category.hbm.xml:
<class name="Category" table="CATEGORY_TABLE">
  <id name="id" column="ID" type="integer">
   <generator class="native"></generator>
  </id>
  <property name="categoryName" column="CATEGORY_NAME" length="30" type="string"></property>
  
  <set name="items" table="CATEGORY_ITEM" cascade="save-update">
   <key column="CATEGORY_ID"></key>
   <many-to-many class="Item" column="ITEM_ID"></many-to-many>
  </set>
  
 </class>
Item.hbm.xml:
<class name="Item" table="ITEM_TABLE">
  <id name="id" column="ID" type="integer">
   <generator class="native"></generator>
  </id>
  <property name="itemName" column="ITEM_NAME" length="30" type="string"></property>
 </class>

 

----------------------------------------------------双向多对多------------------------------------------------------
Category:
 private Integer id;
 
 private String categoryName;
 
 private Set<Item> items = new HashSet<Item>();

Item:
 private Integer id;
 
 private String itemName;

 private Set<Category> categories = new HashSet<Category>();
映射:
Category.hbm.xml:
 <class name="Category" table="CATEGORY_TABLE">
  <id name="id" column="ID" type="integer">
   <generator class="native"></generator>
  </id>
  <property name="categoryName" column="CATEGORY_NAME" length="30" type="string"></property>
  
  <set name="items" table="CATEGORY_ITEM" cascade="save-update">
   <key column="CATEGORY_ID"></key>
   <many-to-many class="Item" column="ITEM_ID"></many-to-many>
  </set>
  
 </class>
Item.hbm.xml:
 <class name="Item" table="ITEM_TABLE">
  <id name="id" column="ID" type="integer">
   <generator class="native"></generator>
  </id>
  <property name="itemName" column="ITEM_NAME" length="30" type="string"></property>
  
  <set name="categories" table="CATEGORY_ITEM" inverse="true">
   <key column="ITEM_ID"></key>
   <many-to-many class="Category" column="CATEGORY_ID"></many-to-many>
  </set>
  
 </class>
----------------------------------------------------单向一对一(基于外键)------------------------------------------------------
Department:

 private Integer id;
 private String deptName;
 
 private Manager mgr;

Manager:

 private Integer id;
 private String mgrName;
 
 private Department dept;

映射:
Department.hbm.xml:
 <class name="Department" table="DEPT_TABLE">
  
  <id name="id" column="DEPT_ID" type="integer">
   <generator class="native"></generator>
  </id>
  
  <property name="deptName" column="DEPT_NAME" type="string" length="30"/>
  
  <!-- 使用多对一映射一对一, 只需要设置 unique="true" -->
  <many-to-one name="mgr" class="Manager" column="MGR_ID" unique="true"/> 
 
 </class>
Manager.hbm.xml:
 <class name="Manager" table="MANAGER_TABLE">
  
  <id name="id" column="ID" type="integer">
   <generator class="native"></generator>
  </id>
  
  <property name="mgrName" column="MGR_NAME" length="30" type="string"/>
  
  <!-- 
   property-ref: 指定使用被关联实体主键以外的字段作为关联字段
  -->
  <one-to-one name="dept" class="Department" property-ref="mgr"></one-to-one>
 
 </class>


----------------------------------------------------单向一对一(基于主键)------------------------------------------------------
Department:

 private Integer id;
 private String deptName;
 
 private Manager mgr;

Manager:

 private Integer id;
 private String mgrName;
 
 private Department dept;

映射:
Department.hbm.xml:
  <class name="Department" table="DEPT_TABLE">
  
  <id name="id" column="DEPT_ID" type="integer">
   <generator class="native"></generator>
  </id>
  
  <property name="deptName" column="DEPT_NAME" type="string" length="30"/>
  
  <one-to-one name="mgr" class="Manager"></one-to-one>
 
 </class>
Manager.hbm.xml:
  <class name="Manager" table="MANAGER_TABLE">
  
  <id name="id" column="ID" type="integer">
   <generator class="foreign">
    <param name="property">dept</param>
   </generator>
  </id>
  
  <property name="mgrName" column="MGR_NAME" length="30" type="string"/>
  
  <!-- 
   constrained(约束):指定为当前持久化类对应的数据库表的主键添加一个外键约束,
   引用被关联的对象(“对方”)所对应的数据库表主键
  -->
  <one-to-one name="dept" class="Department" constrained="true"></one-to-one>
 
 </class>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值