In case this might incite people to give opinions/ideas/advice, here's my rough line of thought.
1) One of the approaches would be to keep the two objects separate, the Full one extending the Simple one, as highlighted in the previous post. In the cases where I already had at hand a SimplePerson, I could make use of a constructor to go to the FullPerson:
Code:
public FullPerson (SimplePerson simplePerson) {}
which could prefill the FullPerson fields.
Conversely, I could have a projector method on the FullPerson class that would yield the SimplePerson contained within:
Code:
public SimplePerson getSimplePerson() {}
(This is roughly the equivalent of a cast...)
Now that's all very well, but since my application is a Web project, it's in essence amnesic: each action doesn't really remember what's happened before, short of building some sort of in-house cache structure... Hence the hope that Ehcache can cleverly do all the work for me...
2) Another approach would be to do without the SimplePerson object. All the information is packed inside the FullPerson, but thanks to Hibernate's lazy loading strategy, I would then try to tweak the settings so that, by default, when accessing a FullPerson from the database, only the so-to-speak SimplePerson is loaded, and no more work is done by the database than if I had loaded a SimplePerson...
I could then have a (service?) method that ensures that the FullPerson is thoroughly loaded when needed.