`
aa00aa00
  • 浏览: 326865 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
文章分类
社区版块
存档分类
最新评论

关于hibernate中的组织结构和人员的关系

阅读更多

这几天,在做一个OA的系统,涉及到了不少的内容,如组织机构(机构管理和人员管理) 和基于ACL的权限管理,公文管理和工作流的管理,等等,呵呵!! 

 

   这里的机构和人员采用的是职能型的设计方式.

 

  记录点心得:

 

  (1)首先在做一个系统时候,要仔细阅读需求分析书.

 (2) 建立相关的领域模型,根据领域模型创建实体类模型->可以使用ant加xdoclt的方式,生成相应的影像文件和配置文件.

 (3)开始,对组织机构模块进行开发,进行相关的领域模型,可以使用ant加xdoclt的方式,生成相应的影像文件和配置文件

 

 先建立一个人员类(person.java类)

 

package com.bjsxt.oa.model;

/**
 *
 * @author Administrator
 * @hibernate.class table="T_Person"
 */
public class Person {
 
 /**
  * @hibernate.id
  *   generator-class="native"
  */
 private int id;
 
 /**
  * @hibernate.property
  */
 private String name;
 
 /**
  * @hibernate.property
  */
 private String sex;
 
 /**
  * @hibernate.property
  */
 private String address;
 
 /**
  * @hibernate.property
  */
 private String duty;
 
 /**
  * @hibernate.property
  */
 private String phone;
 
 /**
  * @hibernate.property
  */
 private String description;
 
 /**
  * @hibernate.many-to-one
  */
 private Organization org;

 
 /**
  * Person 1-----1 User
  * @hibernate.one-to-one
  *   property-ref="person"
  */
 private User user;
 
 public String getAddress() {
  return address;
 }
 public void setAddress(String address) {
  this.address = address;
 }
 public String getDescription() {
  return description;
 }
 public void setDescription(String description) {
  this.description = description;
 }
 public String getDuty() {
  return duty;
 }
 public void setDuty(String duty) {
  this.duty = duty;
 }
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getPhone() {
  return phone;
 }
 public void setPhone(String phone) {
  this.phone = phone;
 }
 public String getSex() {
  return sex;
 }
 public void setSex(String sex) {
  this.sex = sex;
 }
 public Organization getOrg() {
  return org;
 }
 public void setOrg(Organization org) {
  this.org = org;
 }
 public User getUser() {
  return user;
 }
 public void setUser(User user) {
  this.user = user;
 }
}

 

在上面这个人员person.java类中,建立了相应的属性,以及指向了Organization.java(结构类),的方式,人员类和机构类是

多对一关系,建立了many-to-one的关联关系.

 

生成的person.hbm.xml文件如下:

 

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class table="T_Person" name="com.bjsxt.oa.model.Person">
    <id name="id">
      <generator class="native"/>
    </id>
    <property name="name"/>
    <property name="sex"/>
    <property name="address"/>
    <property name="duty"/>
    <property name="phone"/>
    <property name="description"/>
    <many-to-one name="org"/>
    <one-to-one name="user" property-ref="person"/>
  </class>
</hibernate-mapping>

下面建立机构类Organization.java

因为机构类,涉及到了,父机构和子机构的关系,所以在hibernate建立一个树结构采用了parent指向了父机构的方式.

还有考虑到时双向关联 建立set children属性.

 

package com.bjsxt.oa.model;

import java.util.Set;

/**
 *
 * @author Administrator
 * @hibernate.class table="T_Organization"
 */
public class Organization {
 
 /**
  * @hibernate.id
  *   generator-class="native"
  */
 private int id;

 /**
  * @hibernate.property
  */
 private String name;
 
 /**
  * @hibernate.property
  */
 private String sn;
 
 /**
  * @hibernate.property
  */
 private String description;
 
 /**
  * @hibernate.many-to-one
  *   column="pid"
  */

 private Organization parent;
 
 /**
  * @hibernate.set inverse="true" lazy="extra"
  * @hibernate.key column="pid"
  * @hibernate.one-to-many class="com.bjsxt.oa.model.Organization"
  */

 private Set children;

 
 public Set getChildren() {
  return children;
 }
 public void setChildren(Set children) {
  this.children = children;
 }
 public String getDescription() {
  return description;
 }
 public void setDescription(String description) {
  this.description = description;
 }
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public Organization getParent() {
  return parent;
 }
 public void setParent(Organization parent) {
  this.parent = parent;
 }
 public String getSn() {
  return sn;
 }
 public void setSn(String sn) {
  this.sn = sn;
 }
}

这里请注意红色的部分,这是核心,因为有树形机构,对parent进行了映射,以及双向关联的映射,这是核心.

 

呵呵

 

生成的Organization.hxm.xml文件如下:

 

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class table="T_Organization" name="com.bjsxt.oa.model.Organization">
    <id name="id">
      <generator class="native"/>
    </id>
    <property name="name"/>
    <property name="sn"/>
    <property name="description"/>
    <many-to-one column="pid" name="parent"/>
    <set lazy="false" inverse="true" name="children">
      <key column="pid"/>
      <one-to-many class="com.bjsxt.oa.model.Organization"/>
    </set>
  </class>
</hibernate-mapping>

注意红色的部分.

 

这就是我采用的职能型的设计方式.大家可以参考,呵呵!!

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics