美文网首页架构
JPA 公共属性和操作监听

JPA 公共属性和操作监听

作者: jinelei | 来源:发表于2020-05-20 11:14 被阅读0次

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 + '\'' +
                '}';
    }
}

相关文章

网友评论

    本文标题:JPA 公共属性和操作监听

    本文链接:https://www.haomeiwen.com/subject/ixegohtx.html