这几天,在做一个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中的几种对象关系模型,与大家共享,方便学习
HIBERNATE - 符合Java习惯的关系数据库持久化
hibernate 对象关系映射总结hibernate 对象关系映射总结hibernate 对象关系映射总结
JPA和Hibernate的关系,JPA:Java Persistence APIJPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
HIBERNATE - 符合Java习惯的关系数据库持久化.htm
在hibernate中有多种多样的对应关系,在这里我们具体写出一对一,多对多,一对多的对应关系代码以及数据库,希望对大家有
hibernate中文API,hibernate中文参考手册,hibernate API
hibernate 关系注解:Hibernate Annotation关系映射
Hibernate映射一对多关联关系
hibernate_中文乱码hibernate_中文乱码hibernate_中文乱码hibernate_中文乱码hibernate_中文乱码hibernate_中文乱码
对于hibernate的9中对应关系的代码详解和继承关系数据库表结构设计
Hibernate映射解析 七种映射关系
如果你对Hibernate和对象/关系数据库映射还是个新手,或者甚至对Java也不熟悉,请按照下面的步骤来学习。 阅读第 1 章 Tutorial,这是一篇包含详细的逐步指导的指南。本指南的源代码包含在发行包中,你可以在doc/...
Hibernate对象关系映射一对多 很基础等文档
Hibernate 关联关系映射分类
关于Hibernate的基本数据类型与Java中基本数据类型的映射关系
hibernate实现多对多关联关系源码
Hibernate-单向关系Hibernate-单向关系