java - 仅当记录因数据修改而更新时才更新日期

标签 java oracle jpa updates

我正在为我的项目使用 Oracle JPA。在我的项目中,我们接收文件并将记录插入或更新(如果修改了任何字段值)到数据库表中。 有可能会收到重复的(已收到的)记录,而无需修改字段值。

我的需求是

  1. 如果收到的同一记录没有任何更改,则不应更新日期列。
  2. 如果有新记录或同一记录有任何修改,日期列应更新。

举个例子

第一次插入:

要插入的记录:

EmpID  |  Name  | Designation  | Salary
=========================================
00001  |  Raj   | Team Lead    |600000
00002  |  Kumar | Developer    |400000

插入后的表格:

Emp ID | Name  | Designation | Salary | DATE
===========================================================
00001  | Raj   | Team Lead   | 600000 | 12-04-2018 01:00:00
00002  | Kumar | Developer   | 400000 | 12-04-2018 01:00:00

第二个插入:

要插入的记录:

EmpID  |  Name  | Designation      | Salary
==============================================
00001  |  Raj   | Team Lead        |600000
00002  |  Kumar | Senior Developer |500000

插入/更新后的表:

Emp ID | Name  | Designation      | Salary | DATE
===========================================================
00001  | Raj   | Team Lead        | 600000 | 12-04-2018 01:00:00
00002  | Kumar | Senior Developer | 500000 | 13-04-2018 01:00:00

此处仅发送更改的行日期,因为它仅被真正修改。

在代码中进行此验证是一项繁琐的任务。请说有什么可能的解决方案。

最佳答案

您需要一个监听器来设置当前时间

public class BaseEntityListener {

    @PreUpdate
    public void preUpdate(BaseEntity entity) {

        Date date = new Date();
        entity.setUpdateDate(date);
    }

}

这是模型定义:

@SuppressWarnings("serial")
@MappedSuperclass
@EntityListeners(BaseEntityListener.class)
public class BaseEntity implements java.io.Serializable {

    @Basic(optional = false)
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "updateDate")
    private Date updateDate;

并更新实体使用

        entityManager.merge(model);
        entityManager.flush();

当任何列发生更改时,updateDate 都会更新。当没有更改列时,它不会更新。

关于java - 仅当记录因数据修改而更新时才更新日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49814076/

相关文章:

java - 如何并行化 for 循环,并将每次重复的结果保存在矩阵中?

java - 如何将整数转换为二进制表示形式,并根据需要附加一定数量的位

java - 为什么 Jdk DateFormat 使用 StringBuffer 而不是 StringBuilder?

mysql - SQL:当且仅当子项具有特定属性时获取父项

java - Oracle 在提交和选择之间滞后

java - Hibernate/JPA 注释中的多列连接

hibernate - Spring引导和Spring数据: how are Hibernate Sessions managed?

java - 我如何才能知道此 Java API 更改发生的时间?

sql - 在 SQL 中按用户对列值进行分类

java - JPA 2.0 提供程序 hibernate