我正在为我的项目使用 Oracle JPA。在我的项目中,我们接收文件并将记录插入或更新(如果修改了任何字段值)到数据库表中。 有可能会收到重复的(已收到的)记录,而无需修改字段值。
我的需求是
- 如果收到的同一记录没有任何更改,则不应更新日期列。
- 如果有新记录或同一记录有任何修改,日期列应更新。
举个例子
第一次插入:
要插入的记录:
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/