[URGENTE] Duvida chaves compostas primárias e estrangeiras no Hibernate!

3 respostas
J

Pessoal, tenho umas dúvidas em relação ao mapeamento de chave composta no Hibernate.

Em primeiro lugar, como mapear uma chave primária composta numa classe, em que nenhuma das chaves é ao mesmo tempo FK.

package framework.classesTeste;

public class Pessoa {

		private int codigo;
		private String cpf;
		private String nome;
		
		public Pessoa() {
			
		}

		public String getNome() {
			return nome;
		}

		public void setNome(String nome) {
			this.nome = nome;
		}

		public int getCodigo() {
			return codigo;
		}

		public String getCpf() {
			return cpf;
		}
	
}

[img]http://images.orkut.com/orkut/photos/OQAAAMfhx0CfvWzkU--4G6aEQ-Z6_XRu2KnxGQXg0NUPA1e0zkeD8347f0FCbDY5jgxB1M2oku4oR5DqBK1u15WyCuYAm1T1UPtehLFzUOezqnQWWyHv_MyC3ozF.jpg[/img]

Em segundo lugar, como mapear uma chave primária composta numa classe, em que ao menos uma chave é PK e FK ao mesmo tempo.

package framework.classesTeste;

public class Funcionario {

	private int id; //PK auto incremento
	
                private Pessoa pessoa; //Porém pessoa deve ter chave composta mapeada
                    
	public Funcionario() {
	
	}

	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}

	public int getId() {
		return id;
	}
}

[img]http://images.orkut.com/orkut/photos/OgAAAIuTig6Qs9KurvHD81p4r--bgI-1wWQhQ_qQUdmALqI-L7BBcgp-Z6xaKO0dzRolSkhcPaHr7jKSQ2LwwdvDAMsAm1T1UFhx6OSLXYM4julonSm06auoDMfr.jpg[/img]

Em terceiro lugar, na herança, como mapear a chave composta da classe pai, na classe filha usando o método de mapeamento TABELA POR SUBCLASSE?

package framework.classesTeste;

public class Funcionario extends Pessoa {

	private int id; //PK auto incremento
	
	public Funcionario() {
	
	}

	public int getId() {
		return id;
	}
}

[img]http://images.orkut.com/orkut/photos/OgAAAJ_VaTM_uA7vuCMN_JGnD1MzRX5hqJ6J4kSUGB-LdibOyfilJ7KyZ6yKhQyMrxsalitqPRmJqNLgrOXv1mEqU9IAm1T1UHXpjk_u66U0xA911cZkVCtX6aRr.jpg[/img]

Em quarto lugar, como fazer uma busca no banco usando o session.get se a tabela tem chave composta?

Estamos fazendo um trabalho de monografia, e precisamos muito da ajuda de vocês. Por favor, colocar bem explícito e se possível com exemplo de código.

Segue diagrama deste contexto:

Atenciosamente,
Guilherme

3 Respostas

P

da uma olhada nessa url

[x]
http://blog.mariojunior.com/?p=4

[/x]

P


http://www.infoblogs.com.br/view.action?contentId=18075&Hibernate-Composite-ID.html

P
Primeiramente vamos a tabela:

Permissoes
usuario #
grupo #
centro_de_custo #

# chaves compostas

Agora vamos mapear isso usando hibernate annotations com jpa.

Classe Permissoes:

@Entity
@Table(name = "permissoes")
@IdClass(PermissoesPk.class)
public class Permissoes implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@Column(name = "usuario")
private String usuario;

@Id
@Column(name = "grupo")
private String grupo;

@Id
@Column(name = "centro_de_custo")
private int centroDeCusto;

// gets e sets

}

Criaremos então uma nova classe que contém essas chaves:

@Embeddable
public class PermissoesPk implements Serializable {

private static final long serialVersionUID = 1L;

private String grupo;

private String usuario;

private int centroDeCusto;

// gets e sets

}

De acordo com a documentação para fazer um mapeamento de chaves compostas a classe que contém o nome com final PK deve sobreescrever o método equals e hascode e também implementar Serializable.

Na documentação do hibernate tem outras duas formas de mapeamento usando @Id ou @EmbeddedId.

Veja este exemplo usando @Id:

@Entity
public class RegionalArticle implements Serializable {

@Id
public RegionalArticlePk getPk() { ... }
}

@Embeddable
public class RegionalArticlePk implements Serializable { ... }

Veja este exemplo usando @EmbeddedId:

@Entity
public class RegionalArticle implements Serializable {

@EmbeddedId
public RegionalArticlePk getPk() { ... }
}

public class RegionalArticlePk implements Serializable { ... }


esses exemplos são para guardar, futuramentem precisarei com ctz.

mais exemplos siga:
http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/#d0e1659
Criado 1 de junho de 2009
Ultima resposta 1 de jun. de 2009
Respostas 3
Participantes 2