JPA中EntityListeners注解的使用

使用场景sql

EntityListeners在jpa中使用,若是你是mybatis是不能够用的mybatis

它的意义架构

对实体属性变化的跟踪,它提供了保存前,保存后,更新前,更新后,删除前,删除后等状态,就像是拦截器同样,你能够在拦截方法里重写你的个性化逻辑。并发

它的使用分布式

定义某种功能类型ide

@Embeddable注解表示这个对象不是单独的数据表,它里面的字段会在其它实体中公用 /**高并发

  • 数据创建与更新.
  • Embeddable注解表示不会生成新的数据表,而它的属性会在其它表内部,比较容易实现代码复用. */ @Getter @Setter @Embeddable public class Audit {

@Column(name = "created_on") private LocalDateTime createdOn;性能

@Column(name = "created_by") private String createdBy;学习

@Column(name = "updated_on") private LocalDateTime updatedOn;this

@Column(name = "updated_by") private String updatedBy; } 定义接口,对上面类型进行读和写的行为

/**

  • 数据创建与更新. */ public interface Auditable {

Audit getAudit();

void setAudit(Audit audit); } 定义跟踪器,接口参数会在具体实现类中传过来

/**

  • Hibernate 事件监听器.

  • 实体监听@EntityListeners(AuditListener.class). */ @Slf4j @Component @Transactional public class AuditListener { @PrePersist public void setCreatedOn(Auditable auditable) { Audit audit = auditable.getAudit();

    if (audit == null) { audit = new Audit(); auditable.setAudit(audit); }

    audit.setCreatedOn(LocalDateTime.now()); audit.setUpdatedOn(LocalDateTime.now()); }

@PreUpdate public void setUpdatedOn(Auditable auditable) { Audit audit = auditable.getAudit(); audit.setUpdatedOn(LocalDateTime.now()); } } 实体去实现这个对应的跟踪接口

@Embedded注解表示它是一个内嵌到当前实体里的对象,它本身不是实体,它只表示实体里某些字段。 @EntityListeners(DataEntityListener.class) public class Product implements DataEntity { /**

  • 存储复杂对象内的元素. */ @Embedded private Audit audit;

@Override public Audit getAudit() { return audit; }

@Override public void setAudit(Audit audit) { this.audit = audit; } } 上面代码将实如今实体保存时对Audit实体里的createdOn,updateOn进行赋值,当实体进行更新时对updateOn进行从新赋值的操做。

注意,在当前实体Product对应的数据表里,它会有Audit类型里的属性,即它的数据表字段会有created_on,created_by,updated_on和updated_by等。 欢迎工做一到五年的Java工程师朋友们加入Java群: 741514154 群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用本身每一分每一秒的时间来学习提高本身,不要再用"没有时间“来掩饰本身思想上的懒惰!趁年轻,使劲拼,给将来的本身一个交代!

相关文章
相关标签/搜索