一旦我的一个实体被更改或创建,我就会尝试创建一个日志条目。为了做到这一点,我在 AbstractEntity 类上注册了一个 EntityListener。AbstractEntity 有一个 LogEntries 列表,并且该列表的级联类型是 ALL(我的所有实体都继承自 AbstractEntity)。
我的 EntityListener 的当前实现:
public class EntityChangeListener {
@Inject
SessionController sessionController;
@PreUpdate
public void preUpdate(AbstractEntity entity) {
createLogEntryFor(entity, LogEntry.ChangeType.UPDATED);
}
@PrePersist
public void prePersist(AbstractEntity entity) {
createLogEntryFor(entity, LogEntry.ChangeType.CREATED);
}
private void createLogEntryFor(AbstractEntity entity, LogEntry.ChangeType changeType) {
if (!(entity instanceof LogEntry)) {
Date now = Calendar.getInstance().getTime();
LogEntry logEntry = new LogEntry();
logEntry.setCreator(sessionController.getCurrentUser());
logEntry.setAbstractEntity(entity);
logEntry.setChangeDate(now);
logEntry.setChangeType(changeType);
entity.getLogEntries().add(logEntry);
}
}
}
问题是日志条目没有持久化,尽管使用了级联类型 all。我还尝试删除级联类型并注入我的 LogEntryService(带有 CRUD 方法的 SLSB)以便手动持久化 LogEntry,但它也没有效果。
使用@PostPersist 和@PostUpdate 也会出现同样的问题。
JPA 提供者是 EclipseLink (2.5.0)。
切换到 Hibernate 并使用 Envers 是没有选择的。