Hibernate Question – how to work with history
I have a small hibernate question that I can not seem to find an answer to, however, this may be due to my not knowing how to search for it properly.
The question is: how to work with objects in Java that, in the database, must preserve history? A lot of database schemas, instead of updating rows, do a new insert and mark the new row as active in some way. This allows an organization to basically version their data and ensures that they never loose or delete anything.
Below is a common schema for capturing history. You have a central table, Person, that contains only the fields that are unlikely to change. In this example, I am assuming that most people do not change their names. Off of that central table, are tables that hold all the other data related to the central table. In this case, the two other tables hold a person’s address and phone number. As this data changes, the records in the respective table are not updated. Instead, another row is added to the table and it becomes the active record. Below is a diagram showing the database schema.

Just to make this completely clear, below shows the data in the three tables as they would exist after a few updates.
Person personID | firstname | lastname ---------|-----------|---------- 1 | mickey | mouse Address addressID | street | Person_personID ----------|--------------------|---------------- 1 | 112 somewhere str. | 1 2 | 20 elsewhere ave. | 1 Phone phoneID | phone_number | Person_personID --------|--------------|---------------- 1 | 555-555-1234 | 1 2 | 555-555-4321 | 1 3 | 555-444 4444 | 1
So, here is the question. In Java, I would create the following class diagram:

The problem is that if I modify any of the associated objects, Hibernate will simply go in and update the associated rows in the database. So, is there any way to force Hibernate to insert a new row instead of updating the existing row?