使用
历史政策
和
描述符定制器
从“主表”中删除数据时,如何将记录插入“审计表”?
目前,我正在处理一个简单的用户表作为“主表”,详细信息如下:
A. Java 编码:
@MappedSuperclass
@EntityListeners(com.sfw.entity.TrackingListener.class)
public class BaseEntity implements Serializable,DescriptorCustomizer {
@Override
public void customize(ClassDescriptor descriptor) {
String tblNm = descriptor.getTableName();
String trckTblNm = tblNm.substring(0,tblNm.indexOf("_")) + "_TT";
HistoryPolicy policy = new HistoryPolicy();
policy.addHistoryTableName(tblNm,trckTblNm);
policy.addStartFieldName("TRACK_START");
policy.addEndFieldName("TRACK_END");
descriptor.setHistoryPolicy(policy);
}
}
B. 审计表列
| cre_tms | upd_tms | upd_usr | version | usr_act
| track_start | track_end | user_id | username
C.创建
新用户时的样本数据
| 2012-11-22 13:28:08 | 2012-11-22 13:33:23 | demo2 | 1 | A
| 2012-11-22 13:28:08 | 2012-11-22 13:33:23 | 12 | demo3
D.创建用户然后更新
后的示例数据
| 2012-11-22 13:28:08 | 2012-11-22 13:33:23 | demo2 | 1 | A
| 2012-11-22 13:28:08 | 2012-11-22 13:33:23 | 12 | demo3
| 2012-11-22 13:28:08 | 2012-11-22 13:33:23 | demo2 | 2 | U
| 2012-11-22 13:33:23 | NULL | 12 | demo3updated
E.创建、更新、删除
用户后的示例数据
| 2012-11-22 13:28:08 | 2012-11-22 13:33:23 | demo2 | 1 | A
| 2012-11-22 13:28:08 | 2012-11-22 13:33:23 | 12 | demo3
| 2012-11-22 13:28:08 | 2012-11-22 13:33:59 | demo2 | 2 | U
| 2012-11-22 13:33:23 | 2012-11-22 13:33:59 | 12 | demo3updated
F.审计表的期望输出
| 2012-11-22 13:28:08 | 2012-11-22 13:33:23 | demo2 | 1 | A
| 2012-11-22 13:28:08 | 2012-11-22 13:33:23 | 12 | demo3
| 2012-11-22 13:28:08 | 2012-11-22 13:33:59 | demo2 | 2 | U
| 2012-11-22 13:33:23 | 2012-11-22 13:33:59 | 12 | demo3updated
| 2012-11-22 13:28:08 | 2012-11-22 13:34:59 | demo2 | 3 | D
| 2012-11-22 13:33:59 | 2012-11-22 13:34:59 | 12 | demo3updated
当一条记录被删除时,它只更新 track_end 字段(点 E)
所需的输出是插入一个不同版本的记录(我为此使用 @Version)
对于 usr_act ,该值是从 xhtml 中的文本字段传递的
这可能吗?