Hey All I’m having a difficult time with a database design. As you can see from my current design a Registration can have multiple EmployerRegistrations which can have multiple ClientRegistrations. It’s pretty simple from here. A new registration needs to be created by the user each year.
Unfortunately I need to be able to track changes / amendments. Changes can be made to the Registration information (name, address, etc.) or Client Registration information (remove / add client or remove / add employer).
I’ve tried a bunch different designs, but so far nothing feels “right”. Tracking amendments in the Registration table is easy as this affects all tables above it. All id’s are updated. It’s the changes to the ClientRegistration table that’s throwing me for a loop. As you can see I have a version column I was trying, but it’s not helping me much. With Hibernate it feels like each amended client registration needs it’s own unique registration object, but creating a whole new registration for any client registration amendments doesn’t seem right / efficient.
I’ve been battling this for about a week so any help would be greatly appreciated. Thanks!

Have you checked out Hibernate Envers? Its an automatic versioning plugin for Hibernate. Makes tracking history of object changes very easy. It is configured in an AOP way, so you can simply annotate the object you want audited and let Envers handle the details: