When designing a database to use MVCC (Multi-Version Concurrency Control), you create tables with either a boolean field like \"IsLatest\" or an integer \"VersionId\", and you n
Check out the Envers project - works nice with JPA/Hibernate applications and basically does that for you - keeps track of different versions of each Entity in another table and gives you SVN-like possibilities ("Gimme the version of Person being used 2008-11-05...")
http://www.jboss.org/envers/
/Jens