AbstractEntity
作为父类指示所有Entity的公共结构(id、插入时间、更新时间),使用 EntityListeners
指定数据修改前后打印日志。
@MappedSuperclass
@Getter
@Setter
@ToString
@AllArgsConstructor
@EntityListeners({AbstractListener.class})
public abstract class AbstractEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@CreatedDate
@Column(name = "insert_time", nullable = false, updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date insertTime;
@LastModifiedDate
@Column(name = "update_time", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date updateTime;
public AbstractEntity() {
insertTime = new Date();
updateTime = new Date();
}
}
public class AbstractListener {
private static final Logger logger = LoggerFactory.getLogger(AbstractListener.class);
@PrePersist
public void prePersist(Object object) {
logger.debug("prePersis: {}", object);
}
@PreUpdate
public void preUpdate(Object object) {
logger.debug("preUpdate: {}", object);
}
@PreRemove
public void preRemove(Object object){
logger.debug("preRemove: {}",object);
}
@PreDestroy
public void preDestroy(Object object){
logger.debug("preDestroy: {}", object);
}
@PostPersist
public void postPersist(Object object){
logger.debug("postPersist: {}", object);
}
@PostUpdate
public void postUpdate(Object object) {
logger.debug("postUpdate: {}", object);
}
@PostRemove
public void postRemove(Object object){
logger.debug("postRemove: {}",object);
}
@PostLoad
public void postLoad(Object object){
logger.debug("postLoad: {}", object);
}
}
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "t_tag")
@Entity
public class TagEntity extends AbstractEntity {
@Column(name = "name", nullable = false, unique = true)
private String name;
@Column(name = "description")
private String description;
@Override
public String toString() {
return "TagEntity{" +
"id=" + getId() +
", insertTime='" + getInsertTime() + '\'' +
", updateTime='" + getUpdateTime() + '\'' +
", name='" + name + '\'' +
", description='" + description + '\'' +
'}';
}
}
网友评论