【发布时间】:2017-03-16 13:17:20
【问题描述】:
先谢谢大家了。
我在使用 Eclipselink History 时遇到问题。 addEndFieldName 始终为空。 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 30 2017-03-14 17:19:53.000 "" 30 2017-03-14 17:27:16.000 "" 30 2017-03-14 17:31:32.000 ""
end_date 字段始终为空。删除操作也没有插入到表中。
我不明白为什么会这样。我错过了什么吗?谢谢。
【问题讨论】:
-
空的 endField 似乎表示最新的更改。您的历史记录表仅显示一个 ID 字段 - ID 不可修改,因此记录的历史记录不会太多。您如何删除实体?
-
我已将 id 字段和 start_date 字段作为历史表的主键。我正在通过 entityManager.remove 方法删除
-
开启日志并运行一个简单的测试。在一个事务中保留一个新实体并提交,然后在另一个事务中删除它并显示 EclipseLink 生成的日志 - 它应该记录它尝试使用的 SQL,并且可能会告诉您为什么没有历史条目删除。
-
当我坚持生成的查询如下 INSERT INTO product_history (id_product, active, country_market, data_status, date_created, date_modified, doseage_form, group_code, manufacturer, product_code, product_description, product_name,strength, email_id, id_language_code , id_status, packaging_size, start_date) 没有 end_date。当我删除时,我得到以下 UPDATE product_history SET end_date = ? WHERE ((end_date IS NULL) AND (id_product = ?)) 并且没有 start_date。我真的不知道发生了什么。非常感谢@Chris
标签: java eclipselink