Chave Primária com Objeto

5 respostas
notielc

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??

Abraços

5 Respostas

pcalcado

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.

Vamos lá, descreve o seu modelo de objetos aí.

notielc
Estou usando Hibernate mesmo, vou colocar um exemplo:

@Entity

class Colaborador{

@Id

private Long id;
private String nome;

  private String email;
 
  private Parceiro parceiro;

}

@Entity

class Usuario{

@Id

private Colaborador colaborador;
private String senha;

private String nivel;

}
Obs: Esse codigo acima não funciona

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

Abraços

sergiotaborda
  1. Acho que o que vc está procurando é algo como a anotação do JPA
    http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html#EmbeddedId

  2. 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.

Alguém sabe alguma forma de se usar com objetos?

Criado 2 de julho de 2007
Ultima resposta 22 de jul. de 2008
Respostas 5
Participantes 4