Spring JPA 使用@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy 自动生成时间和修改者_spring data jpa createdby-程序员宅基地

技术标签: DAO  

转载自原文: http://www.jianshu.com/p/14cb69646195

JPA Audit

在spring jpa中,支持在字段或者方法上进行注解@CreatedDate@CreatedBy@LastModifiedDate@LastModifiedBy,从字面意思可以很清楚的了解,这几个注解的用处。

  • @CreatedDate
    表示该字段为创建时间时间字段,在这个实体被insert的时候,会设置值
  • @CreatedBy
    表示该字段为创建人,在这个实体被insert的时候,会设置值

  • @LastModifiedDate@LastModifiedBy同理。

如何使用?

首先申明实体类,需要在类上加上注解@EntityListeners(AuditingEntityListener.class),其次在application启动类中加上注解EnableJpaAuditing,同时在需要的字段上加上@CreatedDate@CreatedBy@LastModifiedDate@LastModifiedBy等注解。

这个时候,在jpa.save方法被调用的时候,时间字段会自动设置并插入数据库,但是CreatedBy和LastModifiedBy并没有赋值,因为需要实现AuditorAware接口来返回你需要插入的值。

  • Application
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.annotation.Import;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;


@SpringBootApplication
@EnableJpaAuditing
public class WalletApplication {
    public static void main(String[] args) {
        new SpringApplicationBuilder(WalletApplication.class).web(true).run(args);
    }
}
  • AuditorAware
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;

@Configuration
public class UserIDAuditorBean implements AuditorAware<Long> {
    @Override
    public Long getCurrentAuditor() {
        SecurityContext ctx = SecurityContextHolder.getContext();
        if (ctx == null) {
            return null;
        }
        if (ctx.getAuthentication() == null) {
            return null;
        }
        if (ctx.getAuthentication().getPrincipal() == null) {
            return null;
        }
        Object principal = ctx.getAuthentication().getPrincipal();
        if (principal.getClass().isAssignableFrom(Long.class)) {
            return (Long) principal;
        } else {
            return null;
        }
    }
}
  • Entity
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.Table;

import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;


/**
 * 店铺与支付渠道设备绑定.
 * @author Wang.ch
 *
 */
@Entity
@Table(name = "store_source_bind")
@EntityListeners(AuditingEntityListener.class)
public class StoreSourceBind {
    /**
     * 创建时间
     */
    @Column(name = "create_time")
    @CreatedDate
    private Date createTime;
    /**
     * 创建人
     */
    @Column(name = "create_by")
    @CreatedBy
    private Long createBy;
    /**
     * 修改时间
     */
    @Column(name = "lastmodified_time")
    @LastModifiedDate
    private Date lastmodifiedTime;
    /**
     * 修改人
     */
    @Column(name = "lastmodified_by")
    @LastModifiedBy
    private String lastmodifiedBy;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34531925/article/details/80500853

智能推荐

Junit入门到掌握-7-JUnit基础-注解BeforeClass和AfterClass和Ignore_org.junit.before-程序员宅基地

文章浏览阅读1.7k次。前面一篇学习了Before和After这两个注解,这两个注解是作用在每一个@Test标注的方法上,每次运行方法都需要运行一次Before和一次After。这篇来学习一个类似的,就是作用范围变成了Class,叫BeforeClass和AfterClass, 特点就是,每运行一次class文件,只执行一次BeforeClass和AfterClass, 这两个注解标注标注的方法是Java中的静态方法。..._org.junit.before

【数据结构与算法】【算法思想】位图_数据结构与算法 散列表位图-程序员宅基地

文章浏览阅读180次。位图BitMap算法public class BitMap { // Java中char类型占16bit,也即是2个字节 private char[] bytes; private int nbits; //nbits 总容量 public BitMap(int nbits) { this.nbits = nbits; this.bytes = new char[nbits/16+1]; } //长度16 k/16 定位某一段 k%16定位段中某一位 pub_数据结构与算法 散列表位图

负载均衡----实现配置篇(Nginx)_panginx-程序员宅基地

文章浏览阅读158次。还是图比较清晰,以下我都用别名称呼:  PA : 负载均衡服务器/WEB入口服务器/www.mydomain.com  P1 : WEB服务器/分身1/192.168.2.3  P2 : WEB服务器/分身2/192.168.2.4  P3 : WEB服务器/分身3/192.168.2.5PS:首先我们学这个的开始之前吧,不懂防火墙的童鞋们,建议你们把PA、P1、P2、P3的防..._panginx

内联元素内放入块级元素会出现什么情况呢?_内联元素可以包含块级元素吗-程序员宅基地

文章浏览阅读865次。我们知道元素可分为块级元素和内联元素,也知道块级元素内既可以嵌套内联元素也可以嵌套块级元素,但是内联元素就只能嵌套内联元素,不可以嵌套块级元素,当然表格下的tr除外,那么如果违反了规定会出现什么样的效果呢?? 代码如下所示&lt;!--内联元素内嵌套块级元素的展示效果--&gt;&lt;div&gt; 这是块级元素 &lt;div style="width: 200px..._内联元素可以包含块级元素吗

黑马程序员---Java基础---注册登录猜字小游戏_mvc模式猜数字游戏-程序员宅基地

文章浏览阅读637次。------- android培训、java培训、期待与您交流! ----------最近研究了一个猜字小游戏和大家分享一下:package cn.itcast.game;/* 猜数字小游戏: 1.生成一个1--1000的一个随机数; 2.引导用户开始游戏; 3.接收用户猜的数字; 4.判断:如果比随机数大,提示:高了 如果比随机数_mvc模式猜数字游戏

windows tomcat项目迁移到Linux上的配置与注意问题-程序员宅基地

文章浏览阅读813次。前一段时间一直在忙windows tomcat项目迁移到Linux上的工作,其中遇到很多很bug的问题,叫人没有脾气!现在这个项目的迁移总算是圆满结束了,今天我把在迁移中环境配置和可能遇到问题的处理方法与大家齐分享!一、运行环境的配置◆ JDK的配置1. 从java.sun.com 网站上下载JDK,注意是要Linux平台的。这里我下的是jdk-6u20-linux-..._如何把window的tomcat项目部署到linux

随便推点

【android 串口开发(二) 之 串口读写操作】_android dev串口读写-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏7次。串口的读写操作既然,我们的so已经生成了,那么接下来就是串口的读写操作啦。下面贴出关键类的代码:** * 串口操作类 */public class SerialPortUtil { private String TAG = SerialPortUtil.class.getSimpleName(); private SerialPort mSerialPort; private OutputStream mOutputStream; private InputStr_android dev串口读写

Kinetis Design Studio修改字体_kinetis design studio教程csdn-程序员宅基地

文章浏览阅读611次。修改字体鼠标点击代码区,右键选择Preferences选择好c/c++中的Editor,点击Edit编辑选择适应的字体,字形,字体大小点击确定,再确定就可以了。_kinetis design studio教程csdn

Hibernate和IBatis对比_hirbanate对比ibatis-程序员宅基地

文章浏览阅读336次。项目也做过几个, 使用IBatis就做一个项目, 基本上都是使用Hibernate, 也只是知道几点关于这两个框架的区别, 今天闲着没事干, 从网上找了几篇文章, 做了一个简单的整理。网上关于这两个框架的比较也很多, 只是自己想把别人的东西拿过来整理一下, IBatis和Hibernate的比较。(非原创)Hibernate VS iBATIS简介Hibernate是当前最流行的O_hirbanate对比ibatis

使用openlivewrite发布的博客,csdn的metaweblog的网址-程序员宅基地

文章浏览阅读735次。csdn的metaweblog的网址 http://write.blog.csdn.NET/xmlrpc/index 其他填写用户名和密码即可 后续准备写一个自己的博客发布客户端_livewrite

PL / SQL游标-1-程序员宅基地

文章浏览阅读66次。该主题包含一些有用的关于游标的技巧/示例,论坛成员可能会觉得有用。 光标 =========== 隐式游标--sql返回单行。 由Oracle Server创建。 显式游标-sql重新调整多个记录行。 由用户创建。 ---------- 光标生命周期 ---------- 声明->打开->获取->检查最后一条记录->关闭 基本语法 ----------..._plsql查询返回-1

简单的Windows游戏-第1部分:游戏框架-程序员宅基地

文章浏览阅读300次。我已决定使用C#和WinForms创建一个简单的Windows游戏,从而得出一系列见解。 还有其他方法可以完成此任务,但我选择了使事情保持简单并演示如何制作游戏的方法。 更有经验的开发人员会注意到我的方法与Microsoft XNA做事之间的相似之处。 这是故意的,有两个原因... XNA是一个出色的业余爱好者框架,可以轻松创建简单的游戏。 希望阅读此书的人能够轻松过渡到它。 我发现XN..._会创建基本的windows游戏厉害吗