Hibernate对象关系简单映射有三种——一对一映射。一对多映射,多对多映射
- 一对一映射
例如Dept表与Emp表。
首先在Dept实体类中增加Set类型的emps属性,勇于存放雇员信息。
private Integer deptno;
private String dname;
private String loc;
private Set<Emp> emps = new HashSet();
然后在Dept.hbm.xml文件中增加一对多属性
<hibernate-mapping>
<class name="com.web.bean.Dept" table="dept">
<id name="deptno" column="deptno">
<generator class="assigned"></generator>
</id>
<property name="dname" column="dname"></property>
<property name="loc" column="loc"></property>
<!-- 一对多关系映射-->
<!--name配置实体类中集合属性名称 -->
<set name="emps">
<!-- 配置关键字段(主键)名称-->
<key column="deptno"></key>
<!--关联映射实体类完整路径 -->
<one-to-many class="com.web.bean.Emp"/>
</set>
</class>
</hibernate-mapping>
测试:
Dept d = (Dept)session.get(Dept.class, 20);
System.out.println(d.getDname()+" "+d.getLoc());
Set<Emp> set = d.getEmps();
for(Emp e : set){
System.out.println(e.getEname()+" 、"+e.getJob()+" "+e.getSal()+" "+e.getDeptno());
}
- 一对多映射
跟多对一差不多,首先在Emp实体类中增加Dept对应的属性
private Integer empno;
private String ename;
private String job;
private Integer mgr;
private String hiredate;
private Double sal;
private Double comm;
private Integer deptno;
private Dept dept;
其次,修改配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name = "com.web.bean.Emp" table = "emp">
<id name = "empno" column="empno">
<generator class="assigned"></generator>
</id>
<property name="ename" column="ename"></property>
<property name="job" column="job"></property>
<property name="mgr" column="mgr"></property>
<property name="hiredate" column="hiredate"></property>
<property name="sal" column="sal"></property>
<property name="comm" column="comm"></property>
<!--多对一映射配置-->
<!--
name:关联实体类映射名称
class:关联实体类路径
column:关联字段主键(外键)
-->
<many-to-one name = "dept" class = "com.web.bean.Dept" column="deptno"></many-to-one>
</class>
</hibernate-mapping>
- 多对多映射
可以简单理解为互相多对一映射,这里换一个环境,假设两张表——商品表,顾客表。两个表的关系是m-n关系。
首先在Tuser(顾客)实体类增加商品属性
private Integer tid;
private String tname;
private Set<Product> products = new HashSet();
然后在Product(商品)中增加顾客属性
private Integer pid;
private String pname;
private String remark;
private Double price;
private Set<Tuser> tusers = new HashSet();
再修改两者的配置文件
<!--商品的配置-->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="com.web.bean.Product" table="product">
<id name="pid" column="pid">
<generator class="assigned"></generator>
</id>
<property name="pname" column="pname"></property>
<property name="remark" column="remark"></property>
<property name="price" column="price"></property>
<!-- 多对多关联映射 -->
<set name="tusers" table="orders">
<key column="pid"></key>
<many-to-many class="com.web.bean.Tuser" column="tid"></many-to-many>
</set>
</class>
</hibernate-mapping>
<!--顾客的配置-->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="com.web.bean.Tuser" table="tuser">
<id name="tid" column="tid">
<generator class="assigned"></generator>
</id>
<property name="tname" column="tname"></property>
<!-- 多对多关联映射 -->
<!--
set name 关联属性名称
set table 关联第三方关联表
-->
<set name="products" table="orders">
<!-- key column 主键 -->
<key column="tid"></key>
<!--
class 关联实体类完整路径
column 关联字段(外键)
-->
<many-to-many class="com.web.bean.Product" column="pid"></many-to-many>
</set>
</class>
</hibernate-mapping>