美文网首页架构
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