Queria saber se tem como colocar uma chave primaria de uma classe sendo um objeto exemplo: tenho a classe colaborador com id,nome,email e tenho a classe usuario q tem o objeto colaborador e senha queria colocar esse objeto colaborador como chave, e não sei como faço alguem pode ajudar??
Objetos não têm chave primária, eles possuem identidades. Se você está falando em um mapeador como Hibernate ou JPA consulte a documentação dos projetos, mas se não é bom focar primeiro no seu modelod e objetos, depois criar tabelas que mapeiem a relação.
A minha ideia é essa de ter um objeto colaborador com todas as informações dele e um objeto só para o login nem todo colaborador tem um login no sistema mas todo login pertence a um colaborador e o meu login seria o id do colaborador.Por isso quero q o meu colaborador seja a chave do Usuario
Pode ser que minha ideia seja ruim, se alguem puder me ajudar nessa duvida agradeço
Não é correto fazer uma entidade a chave da outra. Usuário deve ter a sua propria ID , um long. E colaborador deve estar associado ao usuário num one-to-one (por exemplo). Dessa forma vc mantém usuários (que são coisas de sistema) separados de colaboradores (que são coisas do coração da aplicação) mas com um mapeamento entre eles. A vantagem é que esta visão, além de ser mais realista resolve o problema de não ter que usar @EmbeddedId
A escolha é sua.
pcalcado
Sem conhecer o domínio, falando apenas de OOP, sua idéia não é ruim. A identidade de um objeto é dada por dimensões de seu estado, a dimensão pode ser uma ributo como um id ou uma relação como colaborador, ou você ainda pode compôr a identidade msiturando dimensões (numa analogia a uma ‘chave composta’), desde que identifique unicamente o objeto (só existe uma instância desta classe com esta dimensão). Não há problema em haver uma ligação entre as classes.
Quanto ao domínio, do pouco que eu sei daqui eu apenas mudaria o nome da classe Usuario para algo como ‘Permissao’, já que ele representa apenas informações de autenticação e autorização.
renatocustodio
Aparentemente essa @EmbeddedId serve apenas para chaves compostas, e no final das contas dentro de uma classe com @EmbeddedId do exemplo tem se apenas tipos primitivos.