在我們開發一個項目的時候,同城定義實體的時候,都會進行一些抽象,也就是面向對象的一些思想.1比如無論是數據實體還是其他類型的實體都會有id欄位2.對於數據實體一般都會有創建人,創建時間,更新人,更新時間,備註等等。 這個時候我們想的肯定是將這些公共的抽象到公共的vo中去,然後具體的不同vo再繼承這些
在我們開發一個項目的時候,同城定義實體的時候,都會進行一些抽象,也就是面向對象的一些思想.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註解就可以了,只是這些公共的欄位不需要了。