------------------------------------------单向多对一-----------------------------------------------------------------
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>