Jpa实体VO使用继承的实体的做法@MappedSuperclass注解的使用

Posted 默默爬坑中

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jpa实体VO使用继承的实体的做法@MappedSuperclass注解的使用相关的知识,希望对你有一定的参考价值。

   在我们开发一个项目的时候,同城定义实体的时候,都会进行一些抽象,也就是面向对象的一些思想.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
 *  实体支持类
 */
@MappedSuperclass
public class BaseEntity implements Serializable{
    
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @Id
    protected String id;

    public String getId() {
        return id;
    }

    public void setId(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
 * 因为创建人和更新人的关联关系比较复杂,所以在其中中没有定义
 */
@MappedSuperclass
public class DataEntity extends BaseEntity{
    /**
     * 
     */
    private static final long serialVersionUID = -3203004068002303110L;
    
    @Id
    protected String id;
    /**
     * 创建时间
     */
    @JsonFormat
    protected Date createDate;
    /**
     * 更新时间
     */
    @JsonFormat
    protected Date updateDate;
    
    /**
     * 备注
     */
    protected String remark;

    public Date getCreateDate() {
        return createDate;
    }

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }

    public Date getUpdateDate() {
        return updateDate;
    }

    public void setUpdateDate(Date updateDate) {
        this.updateDate = updateDate;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
    
    
}

然后我们在我们具体的VO中使用JPA注解就可以了,只是这些公共的字段不需要了。

以上是关于Jpa实体VO使用继承的实体的做法@MappedSuperclass注解的使用的主要内容,如果未能解决你的问题,请参考以下文章

JPA实体继承实体的映射策略

JPA实体继承实体的映射策略

带有 DiscriminatorColumn 的 JPA 实体继承和 UniqueConstraint

EclipseLink + JPA + 通用实体 + SINGLE_TABLE 继承

如何解决从另一个实体(JPA)继承的实体的“未指定主键”?

JPA继承方式