`
aa00aa00
  • 浏览: 331533 次
  • 性别: 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>

注意红色的部分.

 

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

 

 

 

分享到:
评论

相关推荐

    hibernate+struts2人员信息管理系统

    在这个系统中,开发者需要创建数据库和相应的表结构,以及通过Hibernate配置与Java对象的映射。 5. **Eclipse**:Eclipse是Java开发的集成开发环境(IDE),提供了代码编辑、调试、构建等功能,方便开发者进行项目...

    hibernate validate 中文文档 英文文档

    14. Hibernate Validator特定功能(Hibernate Validator specifics):这部分将介绍Hibernate Validator的独有特性,包括fail-fast模式、类层次结构中方法校验的放宽要求、程序化约束定义、高级约束组合特性、Path ...

    hibernate3.3+struts2实现人员的增删改查

    在IT行业中,开发Web应用程序时,常常需要使用到ORM(对象关系映射)框架来处理数据库操作,而Hibernate就是其中的佼佼者。Struts2则是一个常用的MVC(模型-视图-控制器)框架,它能有效地组织和管理前端与后端的...

    Hibernate 经典例子全

    这种关系在数据库中通常通过主键外键关联实现,Hibernate提供了多种方式来建立和维护这种关系,例如使用`@OneToOne`注解。 **五、懒加载和乐观锁** `hibernate_lazy_for_single_end`和`hibernate_optimistic_...

    Hibernate教程09_关系映射之组件映射

    Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,它允许开发人员以面向对象的方式处理数据库操作,极大地简化了数据层的开发。组件映射是Hibernate中的一种高级映射策略,用于将一个类的属性组织成一个...

    基于Struts2和Hibernate的简单学生选课系统

    总结,基于Struts2和Hibernate的简单学生选课系统,充分利用了这两种框架的优势,实现了用户管理、课程管理和选课操作等功能,为小型教育机构或教学环境提供了便捷的在线选课平台。对于想要学习Web开发或深入理解...

    struts+hibernate开发的114网上订餐系统定餐系统

    Struts和Hibernate是两种在Java Web开发中广泛使用的开源框架,它们在构建114网上订餐系统这样的项目中起到了核心作用。Struts是MVC(Model-View-Controller)架构模式的一个实现,主要负责控制应用程序的流程,而...

    Hibernate学习指南pdf

    对象-关系映射是Hibernate的核心能力之一,它将面向对象的数据模型与关系型数据库中的表结构进行无缝对接。通过这种方式,开发人员可以使用Java对象来表示数据库中的记录,从而实现数据的持久化和检索。 - **透明...

    hibernate_reference.pdf

    - **实体继承**:允许在继承关系中使用单表策略或多表策略。 - **组件映射**:可以将实体中的复杂类型映射为数据库中的多个字段或列。 - **自定义类型**:Hibernate 支持自定义类型转换器,以处理特定类型的转换需求...

    Java struts hibernate 购物网站

    Struts 提供了一种结构化的控制层,将视图和模型分离开来,使得开发人员能够更清晰地管理请求和响应。在购物网站中,Struts负责接收用户的HTTP请求,调用相应的Action,执行业务逻辑,并将结果转发到相应的JSP页面...

    hibernate3.jar及其源代码文件

    - **hibernate3-src.zip**: 这是一个ZIP文件,通常包含Hibernate 3的所有源代码文件,可能以目录结构的形式组织,便于开发者阅读和研究。 **相关知识点** 1. **对象关系映射(ORM)**: Hibernate是一个ORM框架,它...

    用struts和hibernate编写的学校购书系统

    具体到系统实现,开发人员需要设计合适的数据库表结构,定义好实体类,并配置Struts的Action和Hibernate的映射文件。在Action中,根据HTTP请求调用对应的业务方法,这些方法通过Hibernate的Session接口进行数据库...

    hibernate笔记

    - **关系型数据库**:如MySQL、Oracle、Access等,它们通过表格的形式来组织数据,表格之间可以通过关联来进行数据查询。 #### 使用Hibernate的基本步骤 1. **新建项目**:在开发环境中创建一个新的项目。 2. **...

    Hibernate实战笔记

    例如,在一个`Customer`与多个`Order`的关联关系中,如果数据库中有`n`个客户,则Hibernate将执行`n+1`次查询,其中`1`是为了获取所有的客户信息,而额外的`n`次查询则是为了获取每个客户的订单信息。 - **立即...

    hibernate中文参考文档

    - **代码结构**: 推荐的项目结构组织方式,便于维护和扩展。 - **设计模式**: 在Hibernate应用中应用的设计模式,如Repository模式等。 - **安全性**: 数据访问层的安全性考虑,如SQL注入的预防。 #### 九、社区...

    Struts2 + Hibernate + mysql

    Struts2、Hibernate和MySQL是Java Web开发中的三个重要组件,它们构成了经典的MVC(Model-View-Controller)架构中的关键技术。在这个框架中,Struts2作为表现层框架,负责处理用户请求并控制应用程序流程;...

    springmvc5+hibernate5+maven整合项目

    Spring MVC、Hibernate 和 Maven 是Java开发中常用的三大框架,它们分别负责不同的职责。Spring MVC 是一个用于构建 Web 应用的轻量级框架,Hibernate 是一个对象关系映射(ORM)框架,Maven 是一个项目管理和集成...

    struts与hibernate中文文档

    Struts是一个MVC(Model-View-Controller)框架,它为Java Servlet和JSP应用提供了结构化的控制层,使得开发人员能够更好地组织和管理应用程序的逻辑。而Hibernate则是一个对象关系映射(ORM)框架,它简化了数据库...

    springmvc+hibernate整合的一个小例子

    首先,Spring MVC 框架是 Spring 框架的一部分,它提供了模型、视图和控制器的分离,使得开发人员可以更好地组织和管理代码。在 Spring MVC 中,Controller 处理来自客户端的请求,将数据传递给 Model,Model 可能会...

Global site tag (gtag.js) - Google Analytics