Eclipselink历史记录addEndFieldName

时间:2017-03-16 13:17:21

标签: java eclipselink

谢谢大家。

使用Eclipselink历史记录时遇到问题。 addEndFieldName始终为null。 addStartFieldName具有正确的时间戳。它适用于插入和更新。删除实体后,历史记录表中没有条目。

请帮助我,我在某个时候安静地努力

这是我的代码:

import org.eclipse.persistence.annotations.Customizer;

private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "id_product")
private Integer idProduct;

.....

和DescriptorCustomizer是

public class TrackHistoryCustomizer implements DescriptorCustomizer {

    @Override
    public void customize(ClassDescriptor descriptor) {
        HistoryPolicy policy = new HistoryPolicy();
        policy.addHistoryTableName(descriptor.getTableName(), descriptor.getTableName() + "_history");
        policy.addStartFieldName("start_date");
        policy.addEndFieldName("end_date");
        policy.setShouldHandleWrites(true);
        descriptor.setHistoryPolicy(policy);
    }
}

以下是我的历史记录表的输出

  

id_product start_date end_date   2017-03-14 17:19:53.000""   2017-03-14 17:27:16.000""   30 2017-03-14 17:31:32.000""

end_date字段始终为null。删除操作也未插入表中。

我无法理解为什么会发生这种情况。我错过了什么吗?感谢。

1 个答案:

答案 0 :(得分:0)

历史表的工作方式是,当您持久保存新实体时,一行会进入历史表,显示此数据的开始日期,但没有结束日期,因为数据仍然存在。当您更改某些内容时,前一个历史记录行将获得结束日期,并且会添加一个新条目以反映当前状态。当前状态始终具有空结束日期,因为它仍处于活动状态。这使您可以审核更改并查看每个更改的时间以及在下次更新之前它们的存在时间。

删除行时,上一个历史记录行只会获得结束日期。那么历史表中应该没有行表示具有空结束日期的已删除实体,因为没有当前数据。