Inheritance for reusing data structures is not a good idea. Inheritance is meant for providing different behavior across multiple implementations of the same base class.
Both inheritance and composition will not buy you much in this context. Composition is meant for embeddable types only, but, here, you have multiple subentities instead, which can even be managed concomitantly by a given Persistence Context.
Do you really fear that duplicating some properties is going to cause you much trouble? If you have unit tests and integration tests, then you should not worry about changing one mapping without changing the other one.
Sometimes,
adding yet-another abstraction will cause more harm than good. Remember that multiple tables have an identifier column. Does it make sense to create a base class to hold that identifier? I doubt so.
As I explained in
this article, I'd rather duplicate the property names than introducing another abstraction which might heart maintainability or performance.