Вот решение, которое я нашел после прочтения этого вопроса; Я также обнаружил, что набор изменений в DescriptorEvent всегда кажется нулевым.
Однако я заметил, что у события есть методы для получения объектов до и после:
Object oldObject = event.getOriginalObject();
Object newObject = event.getSource();
, что позволит вам сделать ручное сравнение полей.
Используя отражение, вы можете написать немного кода, который мог бы сравнить все поля в любом классе.