表中department(部门)不需要有外键来记录post(职务),但职务需要有部门id来记录部门. Hibernate对于column的配置,职务中是一对多(Set),column是部门id,部门中是多对一(many2one),column为部门id. 两边的column属性都是部门id(无外键那张表的主键id).
/**
* 部门表
* @author Edven
*
*/
@Getter @Setter
public class CrmDepartment {
private String depId;
private String depName;//部门名称
//一对多:一个部门对应多个职务,选择set 无序不重复
private Set<CrmPost> postSet=new HashSet<CrmPost>();
}
部门配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.yueguilin.crm.department.domain.CrmDepartment"
table="crm_department" lazy="false">
<id name="depId" column="depId">
<generator class="uuid"></generator>
</id>
<property name="depName" column="depName"></property>
<set name="postSet">
<key column="depId"></key>
<one-to-many
class="com.yueguilin.crm.post.domain.CrmPost" />
</set>
</class>
</hibernate-mapping>
**
* 职务表
* @author Edven
*
*/
@Getter @Setter
public class CrmPost {
private String postId;
private String postName;//职务名称
//多对1:多个职务属于一个部门
private CrmDepartment department;
}
职务配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.yueguilin.crm.post.domain.CrmPost"
table="crm_post" lazy="false">
<id name="postId">
<generator class="uuid"></generator>
</id>
<property name="postName"></property>
<!-- 多对1 -->
<many-to-one name="department"
class="com.yueguilin.crm.department.domain.CrmDepartment"
column="depId"></many-to-one>
</class>
</hibernate-mapping>