我正在为我的项目使用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
此处仅发送行日期,因为它只是真正修改过。
在代码中执行此验证是一项繁琐的任务。请说有任何可能的解决方案。
答案 0 :(得分:1)
您需要一个侦听器来设置当前时间
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();
更改任何列时,将更新