Hibernate Annotations

4 respostas
C

Pessoal tenho essas duas tabelas e gostaria de fazer o mapeamento por annotations.

[b]create table produto(
prd_id integer not null auto_increment,
prd_descricao varchar(30) not null,
prd_categoria integer not null,
primary key(prd_id),
foreign key prd_categoria references categoria(cat_id)
)

create table categoria(
cat_id integer not null auto_increment,
cat_descricao varchar(30) not null,
primary key(cat_id)
)[/b]

agora vejam as classes que geram a tabela

import java.util.Date;

import javax.persistence.CascadeType;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.JoinTable;

import javax.persistence.OneToOne;

import javax.persistence.PrimaryKeyJoinColumn;

import javax.persistence.Table;

@Entity @Table(name=“produto”)
public class Produto {

@Id 
@GeneratedValue	
private Long prd_id;

@Column(name="prd_descricao", nullable=true, length=50)
private String prd_descricao;

private Double prd_preco;	
private Date prd_dtcadastro;
private Long prd_estoque;			

@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
            private Categoria prd_categoria;	

public Categoria getPrd_categoria() {
	return prd_categoria;
}
public void setPrd_categoria(Categoria prd_categoria) {
	this.prd_categoria = prd_categoria;
}

            //o resto do gets e sets bla bla bla

}

a classe categoria

import javax.persistence.CascadeType;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.JoinTable;

import javax.persistence.OneToOne;

import javax.persistence.PrimaryKeyJoinColumn;

import javax.persistence.Table;

@Entity @Table(name=“categoria”)
public class Categoria {

@Id 
@GeneratedValue
private Long cat_id;	

@Column(name="cat_descricao", nullable=true, length=30)
private String cat_descricao;

@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private Produto produto;

public Produto getProduto() {
	return produto;
}
public void setProduto(Produto produto) {
	this.produto = produto;
}
public String getCat_descricao() {
	return cat_descricao;
}
public void setCat_descricao(String cat_descricao) {
	this.cat_descricao = cat_descricao;
}
public Long getCat_id() {
	return cat_id;
}
public void setCat_id(Long cat_id) {
	this.cat_id = cat_id;
}

}

o problema é: o hibernate consegue gerar as 2 tabelas, mas na tabela de produto, nao consta o campo “prd_categoria” que seria a foreign key para a tabela de categorias. Por favor me ajudem

Desde ja agradeço

Celso

4 Respostas

rogercafe

tem alguma coisa errada na sua classe produto.
Meu, por que você guarda um produto dentro de uma categoria?
Sombrio isso hein…
E outra coisa
Até onde eu entendo, uma categoria pode ter vários produtos, então mude suas linhas para o seguinte:
@ManyToOne
@JoinColumn(name=“Categoria_ID”)//por exemplo
private Categoria prd_categoria;

C

Na verdade funcionaria +ou- assim
cada produto so teria uma categoria e cada categoria varios produtos
Sera que se eu mudar o meu codigo somente naquilo que vc postou funcionaria?? O resto dos mapeamentos esta correto?

Grato

Celso

C

Cara o codigo funcionou perfeitamente. So tenho uma duvida. na classe produto tinha que ter um Set de produtos a classe esta correta agora

package br.com.caelum.hibernate;

import java.util.Set;

import javax.persistence.CascadeType;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.JoinTable;

import javax.persistence.ManyToOne;

import javax.persistence.OneToOne;

import javax.persistence.PrimaryKeyJoinColumn;

import javax.persistence.Table;

@Entity @Table(name=“categoria”)
public class Categoria {

@Id 
@GeneratedValue
private Long cat_id;	

@Column(name="cat_descricao", nullable=true, length=30)
private String cat_descricao;

@OneToMany(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private Set<Produto> produto;

public Set<Produto> getProduto() {
	return produto;
}
public void setProduto(Set<Produto> produto) {
	this.produto = produto;
}
public String getCat_descricao() {
	return cat_descricao;
}
public void setCat_descricao(String cat_descricao) {
	this.cat_descricao = cat_descricao;
}
public Long getCat_id() {
	return cat_id;
}
public void setCat_id(Long cat_id) {
	this.cat_id = cat_id;
}

}

plentz

Sempre que for colocar algum pedaço de código, utilize as tags [ code] e [ /code]

Criado 5 de agosto de 2006
Ultima resposta 8 de ago. de 2006
Respostas 4
Participantes 3