博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JPA中EntityListeners注解的使用
阅读量:6986 次
发布时间:2019-06-27

本文共 1617 字,大约阅读时间需要 5 分钟。

使用场景

EntityListeners在jpa中使用,如果你是mybatis是不可以用的

它的意义

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

它的使用

定义某种功能类型

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

/**

  • 数据建立与更新.
  • Embeddable注解表示不会生成新的数据表,而它的属性会在其它表内部,比较容易实现代码复用.

    @Column(name = "created_on")

    private LocalDateTime createdOn;

    @Column(name = "created_by")

    private String createdBy;

    @Column(name = "updated_on")

    private LocalDateTime updatedOn;

    @Column(name = "updated_by")

    private String updatedBy;
    }
    定义接口,对上面类型进行读和写的行为

/**

  • 数据建立与更新.

    */
    public interface Auditable {

    Audit getAudit();

    void setAudit(Audit audit);

    }
    定义跟踪器,接口参数会在具体实现类中传过来

/**

  • Hibernate 事件监听器.
  • 实体监听@EntityListeners(AuditListener.class).

    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注解表示它是一个内嵌到当前实体里的对象,它自己不是实体,它只表示实体里某些字段。

  • 存储复杂对象内的元素.

    @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等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

转载于:https://blog.51cto.com/14084556/2350627

你可能感兴趣的文章
《Adobe Premiere Pro CC经典教程》——14.6 特殊颜色效果
查看>>
Debian 项目不再提供 CD 格式的 ISO 镜像
查看>>
《设计团队协作权威指南》—第1章1.3节甘为螺丝钉
查看>>
android 屏幕保持唤醒 不锁屏 android.permission.WAKE_LOCK
查看>>
《Unity 3D 游戏开发技术详解与典型案例》——1.3节第一个Unity 3D程序
查看>>
Airbnb数据科学团队进化论:如何由内而外实现数据驱动
查看>>
如何用机器学习预测超售,避免美联航“暴力赶客”悲剧
查看>>
css细节(实习第1天)
查看>>
腾讯Android自动化测试实战3.1.4 Robotium的控件获取、操作及断言
查看>>
《C语言点滴》一1.5 内功修炼
查看>>
linux 怎么完全卸载mysql数据库
查看>>
Dart的HTTP请求和响应(1)
查看>>
寻找最大的K个数,Top K问题的堆实现
查看>>
自动发布工具应该具备的11个标准特征
查看>>
页面设计四大基本原则
查看>>
2016及以后的自动化测试趋势 -《测试技术六月刊》
查看>>
基于Angular创建后台数据模拟(译)
查看>>
Spring中bean配置的继承
查看>>
用JSP实现学生查询
查看>>
企业网站怎么建设
查看>>