Herencia en hibernate con solapamiento

Hola antes de nada muchas felicitaciones por el sitio, esta es la primera vez que posteo en el foro.

Mi problema es el siguiente: Estoy usando hibernate como orm  haciendo uso de anotaciones para proporcionarle los metadatos necesarios para que pueda llevar de un modelo al otro (relacional a objetos) y concretamente es el caso en el que debo realizar la representacion de herencia entre entidades es decir que tengo una entidad Persona, Encuestador , SupervisorCampo, ResponsableRegional, las tres ultimas subclases de Persona,  para lo que estoy usando la estragegia JOINED, y andaba bien, bueno la situacion es ahora que tengo una Persona que puede ser Encuestador, SupervisorCampo , ResponsableRegional a la vez como se mapearia para mantener solo un registro en en la tabla personas, ademas existe entre subclases relaciones es decir Encuestador tiene uno o varios SupervisorCampo y SupervisorCampo tiene uno o varios ResponsableRegional.

Espero puedan sugerirme alguna solucion de esta (creo al menos) compleja representacion de herencia o si es necesario cambiar el enfoque del mismo.

Gracias.

 

 

 

Es necesario que hagas

Es necesario que hagas herencia? los diversos objetos tienen diferentes propiedades dependiendo su jerarquia? 

Yo prefiero evitar la herencia debido al mismo problema que mencionas, en Java no hay herencia multiple. Yo prefiero definir roles para los diversos objetos. De esa manera evitas crear una jerarquia que casi siempre te va a complicar la vida. Por otro lado el tener la estrategia JOINED lo que vas a estar haciendo es hacer joins, lo que casi siempre le pega al performance de la base de datos. Evita le herencia, es mi consejo, te dejo unas ligas para que veas las broncas de la herencia.

http://www.javaworld.com/javaworld/jw-08-2003/jw-0801-toolbox.html

http://www.codestyle.org/java/faq-Inheritance.shtml

En la siguiente te muestran como evitar herencia usando enums por ejemplo, que es otra buena idea.

http://danhaywood.com/2010/03/06/simplifying-inheritance-hierarchies-using-powertypes-and-java-5-enums/

Si es necesario hacer herencia

Muchas gracias por tus sujerencias, la verdad es que ahora mismo no tienen propiedades diferentes, pero por cuestiones de normalizacion y claro que prodria darse el caso en el que mas alla se definan propiedades especificas para cada subclase de Persona, es que la estructura de base de datos se encuentra asi y pueda dar soporte a ese futuro requerimiento.

El uso de roles me pareceria muy adecuado pero, ¿como prodria hacer con las propiedades que puedan definirse?