@id Hibernate

7 respostas
gismo

Boa Tarde Pessoal,

Pelo que eu entendi, o @id do Hibernate é como se fosse a “chave” do banco de dados certo?

Então se eu tivesse uma tabela usuario com os campos id, nome, senha com as chaves id, nome, a classe ficaria assim?

package br.com.entidade;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="usuarios")
public class Usuario {
	
	@Id
	private int id;
	@Id
	private String usuario;
	private String senha;
	
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
	
	public Usuario() {
	}

	public String getUsuario() {
		return usuario;
	}

	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}	
	
}

E outra, eu gostaria de utilizar o HibernateUtil do NetBeans no Eclipse, porque não funciona?

Obrigado a todos.

7 Respostas

marcelo.bellissimo

Não faça isso pelo amor de Deus… você já tem um atributo único que é o campo ‘ID’, não precisa fazer chave composta com outro campo…

Falo por experiência, chaves compostas no Hibernate são uma péssima idéia, evite se possível…

Se não for possível, podemos tentar te ajudar… mas faça de tudo pra não ter que usar isso! :roll:

G

ja importou as bibliotecas necessarias pro hibernate funcionar?

marcos1EM

As vezes não da para fugir das chaves compostas entao pesquise por @Embeddable

gismo

Existem tabelas que eu vou utilizar que possuem mais de uma chave e que não possuim um “id” que se auto incrementa, por isso eu “achei” que precisaria fazer isso.

marcelo.bellissimo

gismo:
Existem tabelas que eu vou utilizar que possuem mais de uma chave e que não possuim um “id” que se auto incrementa, por isso eu “achei” que precisaria fazer isso.


Veja bem… SEMPRE dá pra fugir de chaves compostas… como?
Se eu quiser, posso fazer uma constraint unique pros dois ou mais campos que eu quero que sejam a chave, e claro os mesmo não podem ser nulos… faça isso, e crie um campo, apenas pra armazenar o ID para que fique mais fácil pro Hibernate gerenciar, e tudo vai ser mais claro e fácil…

Nada de chaves compostas, nada de Embeddable, apenas a boa e velha chave primária simples…

edit: Se suas tabelas já existem, e elas não tem o campo pro ID, peça pra criar um… não custa nada, vai aumentar pouco o espaço consumido, e vai ser extremamente mais fácil pra você programar… não compensa poupar o minimo de espaço no banco e aumentar significativamente o tempo de desenvolvimento da aplicação… pelo menos esse é o meu ponto de vista…

marcos1EM

marcelo.bellissimo:

Veja bem… SEMPRE dá pra fugir de chaves compostas… como?
Se eu quiser, posso fazer uma constraint unique pros dois ou mais campos que eu quero que sejam a chave, e claro os mesmo não podem ser nulos… faça isso, e crie um campo, apenas pra armazenar o ID para que fique mais fácil pro Hibernate gerenciar, e tudo vai ser mais claro e fácil…

Nada de chaves compostas, nada de Embeddable, apenas a boa e velha chave primária simples…

edit: Se suas tabelas já existem, e elas não tem o campo pro ID, peça pra criar um… não custa nada, vai aumentar pouco o espaço consumido, e vai ser extremamente mais fácil pra você programar… não compensa poupar o minimo de espaço no banco e aumentar significativamente o tempo de desenvolvimento da aplicação… pelo menos esse é o meu ponto de vista…

Concordo que fica extremamente mais fácil programar sem utilizar chaves compostas, porém aqui na empresa, por exemplo, tivemos que fazer uma integração com um sistema legado, então não há possibilidade de alterar o relaciomento entre as tabelas apenas para termos menos trabalho ao programar, por isso ainda aconselho que caso precise trabalhar com chaves compostas pesquise sobreo o @Embeddable, aqui na empresa está funcionando perfeitamente, sem problemas… é logico que é mais custoso mas funciona.

marcelo.bellissimo

marcos1EM:
marcelo.bellissimo:

Veja bem… SEMPRE dá pra fugir de chaves compostas… como?
Se eu quiser, posso fazer uma constraint unique pros dois ou mais campos que eu quero que sejam a chave, e claro os mesmo não podem ser nulos… faça isso, e crie um campo, apenas pra armazenar o ID para que fique mais fácil pro Hibernate gerenciar, e tudo vai ser mais claro e fácil…

Nada de chaves compostas, nada de Embeddable, apenas a boa e velha chave primária simples…

edit: Se suas tabelas já existem, e elas não tem o campo pro ID, peça pra criar um… não custa nada, vai aumentar pouco o espaço consumido, e vai ser extremamente mais fácil pra você programar… não compensa poupar o minimo de espaço no banco e aumentar significativamente o tempo de desenvolvimento da aplicação… pelo menos esse é o meu ponto de vista…

Concordo que fica extremamente mais fácil programar sem utilizar chaves compostas, porém aqui na empresa, por exemplo, tivemos que fazer uma integração com um sistema legado, então não há possibilidade de alterar o relaciomento entre as tabelas apenas para termos menos trabalho ao programar, por isso ainda aconselho que caso precise trabalhar com chaves compostas pesquise sobreo o @Embeddable, aqui na empresa está funcionando perfeitamente, sem problemas… é logico que é mais custoso mas funciona.

Creio eu que esse seja o único caso… infelizmente ainda existem muitos desses casos de integração com sistemas legados… e realmente, não tem como fazer do jeito que eu falei…

Veja aqui os exemplos de como fazer usando o Embeddable:
http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e2177

Criado 25 de agosto de 2010
Ultima resposta 26 de ago. de 2010
Respostas 7
Participantes 4