Ich versuche, einen Änderungsverfolger in meine JPA-Entitäten aufzunehmen (in eine Protokolldatei, keine Datenbank), aber der von meinem DescriptorEventAdapter zurückgegebene changeSet ist immer null. Ich verwende EclipseLink 2.5.2, ojdbc6, spring-orm 4.1.1.JPA DescriptorEventAdapter ChangeSet immer null
Alle Ereignisse werden aufgerufen (einschließlich preUpdateWithChanges) und die Änderungen werden in die Datenbank übertragen. Ich verwende entityManager.merge (entity), um die Entität zu aktualisieren.
HistoryEventListener.java
public class HistoryEventListener extends DescriptorEventAdapter {
@Override
public void preUpdate(DescriptorEvent event) {
ObjectChangeSet changeSet = event.getChangeSet(); // Always null
}
@Override
public void preUpdateWithChanges(DescriptorEvent event) {
ObjectChangeSet changeSet = event.getChangeSet();
...
};
@Override
public void postUpdate(DescriptorEvent event) {
...
}
@Override
public void postMerge(DescriptorEvent event) {
...
}
}
Einige Unternehmen
@Entity
@Table(name = "XXX", schema = "XXX")
@EntityListeners(HistoryEventListener.class)
@Cache(databaseChangeNotificationType = DatabaseChangeNotificationType.NONE, isolation = CacheIsolationType.ISOLATED)
public class XXXX implements Serializable {
// id + fields
}
persistence.xml
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="XXXXXX"
transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/XXXXX</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.weaving" value="static" />
<property name="eclipselink.target-database" value="Oracle11" />
</properties>
</persistence-unit>
</persistence>
Mit UnitOfWork von eclipse wiki gibt auch eine Null ObjectChangeSet.
Funktioniert es wie erwartet, wenn Sie die Cache-Annotation entfernen? – Chris
nein, gleiches Ergebnis. Nein ChangeSet – Martin
Abgesehen vom ChangeSet wird der Rest des DescriptorEvent wie erwartet gefüllt? –