标签:
在我们开发一个项目的时候,同城定义实体的时候,都会进行一些抽象,也就是面向对象的一些思想.1比如无论是数据实体还是其他类型的实体都会有id字段2.对于数据实体一般都会有创建人,创建时间,更新人,更新时间,备注等等。
这个时候我们想的肯定是将这些公共的抽象到公共的vo中去,然后具体的不同vo再继承这些公共的vo。
在JPA中因为每一个实体对应的是一个表,这时候就有可能出现虽然继承了,但是并不能扫描到那些在公共实体中的字段,这时候我们可以使用注解@MappedSuperclass,这个注解的作用就是将这个实体作为基类实体,继承它的实体被扫描的时候会自动扫描公共的这些字段。
BaseEntity:
package uap.web.persistence;
import java.io.Serializable;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;/**
*
*
* @author Hotusm
* @since 2016-03-18
* 实体支持类*/@MappedSuperclasspublic classBaseEntity implements Serializable{/**
**/
private static final long serialVersionUID = 1L;
@IdprotectedString id;publicString getId() {returnid;
}public voidsetId(String id) {this.id =id;
}
}
DataEntity:
package uap.web.persistence;
import java.io.Serializable;
import java.sql.Date;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import com.fasterxml.jackson.annotation.JsonFormat;/**
*
*
* @author Hotusm
* @since 2016-03-18
* 因为创建人和更新人的关联关系比较复杂,所以在其中中没有定义*/@MappedSuperclasspublic classDataEntity extends BaseEntity{/**
**/
private static final long serialVersionUID = -3203004068002303110L;
@IdprotectedString id;/**
* 创建时间*/@JsonFormatprotectedDate createDate;/**
* 更新时间*/@JsonFormatprotectedDate updateDate;/**
* 备注*/
protectedString remark;publicDate getCreateDate() {returncreateDate;
}public voidsetCreateDate(Date createDate) {this.createDate =createDate;
}publicDate getUpdateDate() {returnupdateDate;
}public voidsetUpdateDate(Date updateDate) {this.updateDate =updateDate;
}publicString getRemark() {returnremark;
}public voidsetRemark(String remark) {this.remark =remark;
}publicString getId() {returnid;
}public voidsetId(String id) {this.id =id;
}
}
然后我们在我们具体的VO中使用JPA注解就可以了,只是这些公共的字段不需要了。
标签: