构建基于Hibernate的基类实体(1)

构建基于Hibernate的基类实体(1)
背景分析:
     在企业内部信息系统中,大部分的业务数据可以简单的分成两类:
      一、基础数据,为业务处理提供必需参数,在MIS系统中的客户信息、网点信息等等;
      二、业务单据,为实现企业信息流、数据流、资金流的流转与控制提供业务数据支持,在快递企业中的运单就是一个典型业务单据。

      简单的说,基础数据与具体业务关,业务单据就是只管具体业务。    
      基础数据的特点,1、涉及业务单据的引用问题,一旦引用就是不能删除;2、为了方便数据归类,使用编码进行分类数,如在财务系统中的科目;3、为了增强基础数据的可读性,我们需要增加一个名称属性,如果名称太长了,我们可以考虑增加一个检查或者备注;
     业务数据呢,现实业务中所有单据都通过编码进行区分,比如发票,业务发生后要记录业务日期及记账日期,当业务记录错误时,我们要保证系统业务的原始记录,不能对系统原始数据直接更改(审计叫做业务数据的静止性),需要进行红冲,然后然后写入新的业务数据,新的业务数据业务编号、业务日期无需改变,记账则要记录到当前时间,如果发生多次红冲,如何处理呢,我们可以考虑增加一个有效版本控制。
     再看看,是不是还少了主键?还有一种场景是不是没有考虑到,同一个单据或者基础数据被两个人同时编辑是不是会事务并发的问题?一个单据是否对应多个明细,如果进行处理?试着对问题的回答,对模型进一步总结形成以下结果。
如何通过基类简化开发工作,请见构建基于Hibernate的基类实体(2)
(第一次写博,欢迎大家指点,如有错误谢绝辱骂)。
package com.kds.kuaijian.framework.entity;

import java.io.Serializable;
import javax.persistence.*;


/**
 * @generated
 * 实体基类,用于将来扩展
 
*/
@MappedSuperclass
public abstract class CoreBase implements Serializable {

    
/**
     *
     
*/
    
private static final long serialVersionUID = 3086983746058217854L;
    
/**
     * @generated
     * 主键,禁止为空,禁止更改
     
*/
    @Column(length 
= 44,nullable = false,updatable = false)
    @Id
    
private String id;

    
/**
     * @generated
     
*/
    
public String getId() {
        
return this.id;
    }

    
/**
     * @generated
     
*/
    
public void setId(String value) {
        
this.id = value;
    }
    
    
    
/**
     * 别名
     * 
@return 
     
*/
    
public abstract String getAlias();
    
}


package  com.kds.kuaijian.framework.entity;

import  java.util.Date;

import  javax.persistence. * ;

/**
 * @generated
 * 业务对象基类,增加创建日期、更新时间、版本号,用于处理事务并发
 
*/
@MappedSuperclass
public   abstract   class  ObjectBase  extends  CoreBase {

    
/**
     *
     
*/
    
private   static   final   long  serialVersionUID  =   - 3493844437392704456L ;
    
    
/**
     * @generated创建时间
     
*/
    @Column(nullable 
=   false , updatable  =   false )
    @Temporal(TemporalType.TIMESTAMP)
// 不用set,hibernate会自动把当前时间写入  
     private  Date  createTime;
    
/**
     * @generated更新时间
     
*/
    @Column(nullable 
=   false )
    @Temporal(TemporalType.TIMESTAMP)
    
private  Date lastUpdateTime;
    
/**
     * 版本号
     
*/
    @Column(nullable 
=   false )
    
private   int  version;

    
/**
     * 
@return  the version
     
*/
    
public   int  getVersion() {
        
return  version;
    }

    
/**
     * 
@param  version the version to set
     
*/
    
public   void  setVersion( int  version) {
        
this .version  =  version;
    }

    
/**
     * 
@return  the createTime
     
*/
    
public  Date getCreateTime() {
        
return  createTime;
    }

    
/**
     * 
@param  createTime the createTime to set
     
*/
    
public   void  setCreateTime(Date createTime) {
        
this .createTime  =  createTime;
    }

    
/**
     * 
@return  the lastUpdateTime
     
*/
    
public  Date getLastUpdateTime() {
        
return  lastUpdateTime;
    }

    
/**
     * 
@param  lastUpdateTime the lastUpdateTime to set
     
*/
    
public   void  setLastUpdateTime(Date lastUpdateTime) {
        
this .lastUpdateTime  =  lastUpdateTime;
    }
}


package  com.kds.kuaijian.framework.entity;

import  java.util.Date;
import  javax.persistence. * ;

/**
 * 业务单据基类
 
*/
@MappedSuperclass
public   abstract   class  BillBase  extends  ObjectBase {

    
private   static   final   long  serialVersionUID  =   - 8711722606843400608L ;
    
/**
     * @generated编码
     
*/
    @Column(length 
=   100 , nullable  =   false , updatable  =   false )
    
private  String number;
    
/**
     * @generated描述
     
*/
    @Column(length 
=   200 )
    
private  java.lang.String description;

    
/**
     * 业务日期
     
*/
    @Column(nullable 
=   false , updatable  =   false )
    @Temporal(TemporalType.TIMESTAMP)
// 不用set,hibernate会自动把当前时间写入
     private  Date bizDate;
    
/**
     * 记账日期
     
*/
    @Column(nullable 
=   false , updatable  =   false )
    @Temporal(TemporalType.TIMESTAMP)
// 不用set,hibernate会自动把当前时间写入
     private  Date acctDate;
    
    
/**
     * 是否为有效版本
     
*/
    @Column(nullable 
=   false )
    
private   boolean  effectionVerion;
    
    
/**
     * 是否为红单
     
*/
    @Column(nullable 
=   false )
    
private   boolean  redBill;
    

    
/**
     * @generated
     
*/
    
public  java.lang.String getDescription() {
        
return   this .description;
    }

    
/**
     * @generated
     
*/
    
public   void  setDescription(java.lang.String value) {
        
this .description  =  value;
    }

    
/**
     * 
@return  the number
     
*/
    
public  String getNumber() {
        
return  number;
    }

    
/**
     * 
@param  number the number to set
     
*/
    
public   void  setNumber(String number) {
        
this .number  =  number;
    }

   
    
/**
     * 
@return  the bizDate
     
*/
    
public  Date getBizDate() {
        
return  bizDate;
    }

    
/**
     * 
@param  bizDate the bizDate to set
     
*/
    
public   void  setBizDate(Date bizDate) {
        
this .bizDate  =  bizDate;
    }

    
/**
     * 
@return  the acctDate
     
*/
    
public  Date getAcctDate() {
        
return  acctDate;
    }

    
/**
     * 
@param  acctDate the acctDate to set
     
*/
    
public   void  setAcctDate(Date acctDate) {
        
this .acctDate  =  acctDate;
    }

    
/**
     * 
@return  the effectionVerion
     
*/
    
public   boolean  isEffectionVerion() {
        
return  effectionVerion;
    }

    
/**
     * 
@param  effectionVerion the effectionVerion to set
     
*/
    
public   void  setEffectionVerion( boolean  effectionVerion) {
        
this .effectionVerion  =  effectionVerion;
    }

    
/**
     * 
@return  the redBill
     
*/
    
public   boolean  isRedBill() {
        
return  redBill;
    }

    
/**
     * 
@param  redBill the redBill to set
     
*/
    
public   void  setRedBill( boolean  redBill) {
        
this .redBill  =  redBill;
    }
}


package  com.kds.kuaijian.framework.entity;

import  javax.persistence. * ;

/**
 * 基础数据基类
 
*/
@MappedSuperclass
public   abstract   class  BaseData  extends  ObjectBase {

    
private   static   final   long  serialVersionUID  =   - 8711722606843400608L ;
    
/**
     * @generated编码
     
*/
    @Column(length 
=   100 , nullable  =   false  ,updatable  =   false )
    
private  String number;
    
    
/**
     * @generated名称
     
*/
    @Column(length 
=   200 , nullable  =   false ,updatable  =   false )
    
private  java.lang.String name;
    
    
/**
     * @generated简称
     
*/
    @Column(length 
=   200 )
    
private  java.lang.String simpleName;
    
    
/**
     * @generated描述
     
*/
    @Column(length 
=   200 )
    
private  java.lang.String description;
    
    
/**
     * 是否删除
     
*/
    @Column(nullable 
=   false )
    
private   boolean  isDelete;

    
/**
     * @generated
     
*/
    
public  java.lang.String getName() {
        
return   this .name;
    }

    
/**
     * @generated
     
*/
    
public   void  setName(java.lang.String value) {
        
this .name  =  value;
    }

    
/**
     * @generated
     
*/
    
public  java.lang.String getSimpleName() {
        
return   this .simpleName;
    }

    
/**
     * @generated
     
*/
    
public   void  setSimpleName(java.lang.String value) {
        
this .simpleName  =  value;
    }

    
/**
     * @generated
     
*/
    
public  java.lang.String getDescription() {
        
return   this .description;
    }

    
/**
     * @generated
     
*/
    
public   void  setDescription(java.lang.String value) {
        
this .description  =  value;
    }

    
/**
     * 
@return  the number
     
*/
    
public  String getNumber() {
        
return  number;
    }

    
/**
     * 
@param  number the number to set
     
*/
    
public   void  setNumber(String number) {
        
this .number  =  number;
    }

    
public   boolean  isDelete() {
        
return  isDelete;
    }

    
public   void  setDelete( boolean  isDelete) {
        
this .isDelete  =  isDelete;
    }
}

你可能感兴趣的:(构建基于Hibernate的基类实体(1))