Improve model by adding non-business PK to all entities, and restrict access to setId()