Tôi đang cố gắng bao gồm một trình theo dõi thay đổi cho các thực thể JPA của tôi (đối với tệp nhật ký, không phải là cơ sở dữ liệu), tuy nhiên bộ thay đổi được trả về bởi DescriptorEventAdapter của tôi luôn là rỗng. Tôi đang sử dụng EclipseLink 2.5.2, ojdbc6, spring-orm 4.1.1.JPA DescriptorEventAdapter ChangeSet luôn rỗng
Tất cả các sự kiện được gọi (bao gồm preUpdateWithChanges) và các thay đổi được đẩy vào cơ sở dữ liệu. Tôi đang sử dụng entityManager.merge (thực thể) để cập nhật thực thể.
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) {
...
}
}
Một số tổ chức
@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>
Sử dụng UnitOfWork từ eclipse wiki cũng trả về một Null ObjectChangeSet.
Tính năng này có hoạt động như bạn mong đợi nếu bạn xóa chú thích Cache không? – Chris
không, cùng một kết quả. Không có ChangeSet – Martin
Ngoài ChangeSet, phần còn lại của DescriptorEvent có được như mong đợi không? –