Hibernate关系映射3——多对一和一对多关联映射
一、多对一和一对多关联映射(多个员工属于同一部门)这几种关联映射后的关系模型都是一致的:
t_employee(id int pk, name varchar, departmentid int fk->t_department(id))
t_department(id int pk, name varchar)
?
1、多对一单向关联
实体模型:
com.lrh.hibernate.Employee(int id, String name, Department department)
com.lrh.hibernate.Department(int id, String name)
?
配置文件:
?<!-- com.lrh.hibernate/Employee.hbm.xml -->
?<hibernate-mapping>?
???? <class name="com.lrh.hibernate.Employee" table="t_employee">?
??????? <id name="id"><generator column="departmentid"/>?
???? </class>?
?</hibernate-mapping>
<!-- com.lrh.hibernate/Department.hbm.xml -->???
?<hibernate-mapping>?
??? <class name="com.lrh.hibernate.Department" table="t_department">?
??????? <id name="id"><generator table="t_employee">?
??????? <id name="id"><generator table="t_department">?
??????? <id name="id">
??????? ?<generator table="t_employee">?
???????? <id name="id"><generator column="departmentid"/>?
???? </class>?
</hibernate-mapping>
?
配置文件:
?<!-- com.lrh.hibernate/Department.hbm.xml -->
?<hibernate-mapping>?
???? <class name="com.lrh.hibernate.Department" table="t_department">?
???????? <id name="id"><generator class="native"/></id>?
???????? <property name="name"/>?
???????? ?<!--? 双向关联中,为<set>加入”inverse=true”可以反转维护关系:
???????? ?????? Hibernate将放弃从一的一端维护。也就是employee和department的关系必须使用employee维护,
???????? ??????????????????? 操作department时Hibernate将不维护这个关系。
???????? ?? -->
???????? <set name="employees">?
???????????? <!-- <key>指定引用至自身的外键表(t_employee)中的外键 -->
??????????? <key column="departmentid"/>?
???????????? <!-- <one-to-many>映射一对多关系 -->
???????????? <one-to-many class="com.lrh.hibernate.Employee"/>?
???????? </set>?
???? </class>?
?</hibernate-mapping>
?