Relacionamento com herança no Hibernate

Salve Galera …

Estou trabalhando em um sistema simples. Mas que agora surgiu uma dúvida não tão simples.

É um sistema de contatos internos de uma Cia.

A dificuldade e de fazer o relacionamento de 2 entidades. <Usuario> e <Contato>

Todos os funcionários da empresa são um Contato.

Todos os funcionários estaram cadastrados no BD, mesmo os que não usarem o sistema.

Após um funcionário solicitar o uso do sistema, será liberado o acesso e ele além de <Contato>, será também um <Usuario>.

Eu tentei relacionar estas duas entidades assim:

public class Contato&#123;
	private Long id;
	private String nome;
	private String sobrenome;
	private Integer telefone;
	private Integer celular;
	private Integer fax;
	private String email;
	private String login;

	métodos get e set omitidos
&#125;

public class Usuario&#123;

	private Contato id;
	private String senha;

	métodos get e set omitidos
&#125;

Só que a classe <Contato> não pode ser ao mesmo tempo um @Entity e um @Embeddable.

Entenderam ?!?

Então a partir do momento que o <Contato> cadastrar sua senha, ele passa a ser também um <Usuario>

No banco está exatamente como nas classes, com excessão da usuario que ao invés de um contato_id, tem somente um id.

A idéia seria quando cadastrar o usuario, relacionar o id do usuario como o mesmo id com contato e somente cadastrar a senha na tabela usuario.

Eu tenho uma 3 tabela que seria a que relacionaria as 2 entidades.

UsuarioContato
Campos : usuario_id e contato_id

Alguém poderia me dar uma opinião ou outra solução qto a esta forma de relacionamento ?!?

[ :grin: ]

opa boa noite :grin:

bom antes de ser um problema de mapeamento
vejo que existe um problema de modelagem de dados…

se tu revisar o formato da representação acredito que tu resolverá
o problema, eu nesse caso mudaria para algo do genero:

public class Contato &#123;
   private Long id;
   private Integer telefone;
   private Integer celular;
   private Integer fax;
   private String email;

   // set's e get's
&#125;

public class Pessoa &#123;
   private Long id;
   private String nome;
   private String sobrenome;
   private List contatos; 

   // set's e get's
&#125;

public class Usuario extends Pessoa &#123;
   private String login; 
   private String senha; 

   // set's e get's
&#125;

confira esse trecho da documentação do Hibernate, trata de algo
do genero

remodelando para um formato como este você conseguirá mapear
mais tranquilamente :wink: