Hibernate: joined-subclass e subclass

Olá,

Eis que me deparei com o seguinte problema. Uso o Hibernate para ORM e agora preciso de uma hieararquia de classes que funcione assim:
[list]
People - classe na raiz da arvore de herança e se relaciona com a table SCACIN_PEOPLE;

User - classe filha de People e que, no mapeamento é uma joined-class, ou seja, uma table especifica para essa classe. No casos, SCACIN_USER;

Administrator e outras 2 classes - essas são subclasses de User e não precisam de uma table por classe.
[/list]
Então, o mapeamento das classes filhas de User deveriam ser feitas via subclass com um descriminator value para identificar cada classe na hierarquia de herança. O problema é que a DTD do Hibernate não permite que uma joined-subclass possua uma subclass ou o contrario. Mais ainda, vc não pode ter no mapeamento de uma classe, no caso People, mix entre joined-subclass e subclass. Ou seja, usa uma ou outra. Alguma ideia de como resolver isso? A unica coisa que me ocorre agora é usar composição entre People e User, mas isso implica mudançs no Modelo ER e daí, haja briga com quem fez o banco.

Details:
Hibernate Version: 2.1.4, 02. June 2004
Class headers with XDoclet Tags:

[code]
/**

  • @since 18/07/2004
  • @version 0.1
  • @hibernate.class discriminator-value="U"
  •              proxy="br.ufpe.scacin.model.People"
    
  •              table="SCACIN_PEOPLE"
    

*/
public class People implements Identifiable {…}[/code]

[code]
/**

  • @since 18/07/2004
  • @version 0.1
  • @hibernate.joined-subclass-key column="USER_ID"
  • @hibernate.joined-subclass proxy="br.ufpe.scacin.model.User"
  •                        table="SCACIN_USER"
    

*/
public class User extends People {…}[/code]

[code]
/**

  • @since 18/07/2004
  • @version 0.1
  • @hibernate.subclass discriminator-value="A"
  •                 proxy="br.ufpe.scacin.model.Administrator"
    

*/
public class Administrator extends User {…}[/code]
Obviamente, como expliquei acima, o conjunto de tags para a classe Administrator não funciona.

Post pertinente no forum do Hibernate:
http://forum.hibernate.org/viewtopic.php?t=931004

valeuz…

Use tudo joined!
Alias, eh muito mais elegante em relacao ao modelo entidade relacionamento neh? forma normal e tal…

[quote=“Paulo Silveira”]Use tudo joined!
Alias, eh muito mais elegante em relacao ao modelo entidade relacionamento neh? forma normal e tal…[/quote]
Mas, Paulo, usar tudo joined me obriga a fazer mudanças na estrutura do banco visto que assim fica uma table-per-class, não? Bom, eu não posso alterar o modelo do banco. Vou refatorar algumas coisas para mandar metade essa hierarquia de herança pro espaço. Sugestões?

ps.: Dos foruns do Hibernate: “Hibernate3 solves this by allowing you to mix <subclass> and <join>”

valeuz…