Ajuda Hibernate, Chave Estrangeira

9 respostas
kvnallen

Seguinte pessoal, desculpa ai se eu não soube especificar bem o título, mas é o seguinte, tenho 2 classes que estou usando o Hibernate.
Na classe sabor tenho : id, nome, preco_producao, e um campo ingrediente, sendo que nesse campo serão vários ingredientes que eu iria selecionar em um checkbox por exemplo, queria uma dica de como fazer isso.
Tenho a classe Pizza que tem id, sabor, preco_producao (que será de acordo com o sabor escolhido, irei pegar o preço de produção do sabor), preco_venda e tamanho

Estou usando o Hibernate para criar as tabelas no banco.
Então queria uma ajuda de vocês de como eu faria +/- isso, Obrigado!

9 Respostas

drsmachado

Se serão vários ingredientes, será preciso ter uma lista de ingredientes, não?

public class Sabor{
//atributos de sabor
public List<Ingrediente> ingredientes;
}

O relacionamento deve ser mapeado como @OneToMany, pesquise sobre esta annotation do Hibernate.

kvnallen

drsmachado:
Se serão vários ingredientes, será preciso ter uma lista de ingredientes, não?

public class Sabor{
//atributos de sabor
public List<Ingrediente> ingredientes;
}

O relacionamento deve ser mapeado como @OneToMany, pesquise sobre esta annotation do Hibernate.

Seria um ingrediente para vários sabores certo?

adriano_si

kvnallen:
drsmachado:
Se serão vários ingredientes, será preciso ter uma lista de ingredientes, não?

public class Sabor{
//atributos de sabor
public List<Ingrediente> ingredientes;
}

O relacionamento deve ser mapeado como @OneToMany, pesquise sobre esta annotation do Hibernate.

Seria um ingrediente para vários sabores certo?

Não… Vários ingredientes para um Sabor. O que com certeza faz mais sentido.

Você terá uma Pizza com vários ingredientes ou um ingrediente com várias Pizzas ???

Abs []

kvnallen

Entendi, foi porque pelo que deduzi @OneToMany (Um para Vários) declarado no list, entendi que fosse Um ingrediente para vários sabores.

drsmachado

Se formos olhar de forma bem detalhada, o relacionamento correto é muitos para muitos.
Um ingrediente pode estar em vários sabores e um sabor pode ter vários ingredientes, não?

Portuguesa: muzzarela, presunto, cebola, azeitonas...
Quatro queijos: muzzarela, cheddar, provolone e catupiry...

Entendeu?

drsmachado

Aliás, pizza e sabor também tem relacionamento muitos para muitos (@ManyToMany), pois cada pizza pode ter 1 ou 2 ou mais sabores, o limite quem define é você.

kvnallen
drsmachado:
Se formos olhar de forma bem detalhada, o relacionamento correto é muitos para muitos. Um ingrediente pode estar em vários sabores e um sabor pode ter vários ingredientes, não?
Portuguesa: muzzarela, presunto, cebola, azeitonas...
Quatro queijos: muzzarela, cheddar, provolone e catupiry...
Entendeu?

Também pensei nisso, seria @ManyToMany então na classe Sabor da coluna private List ingrediente; ?
E o que eu teria que por na classe do ingrediente?

Classe ingrediente
@Entity
public class Ingrediente {

	@Id
	@GeneratedValue
	private long id;

	@Column(name = "nome", nullable = false)
	private String nome;

	@Column(name = "quantidade", nullable = false)
	private String quantidade;

	@Column(name = "preco_compra")
	private String precoCompra;

	@Column(name = "preco_venda")
	private String precoVenda;

	@Column(name = "lucro")
	private double lucro;

	@Column(name = "validade")
	private String validade;

	@Column(name = "fornecedor")
	private String fornecedor;
Classe sabor.
@Entity
public class Sabor {

	@GeneratedValue
	@Id
	private long id;
	
	@Column(name="nome")
	private String nome;
	
	@Column(name="preco_producao")
	private double precoProducao;
	
	@ManyToMany
	@Column(name="ingrediente")
	private List<Ingrediente> ingrediente;
}
drsmachado

Bom, há dois tipos de mapeamentos, o uni e o bidirecional.
É possível mapear tudo através do sabor, apenas.
Porém, se for necessário, você também deverá incluir um atributo do tipo List, de sabor, em ingrediente e adequar o mapeamento.

kvnallen

drsmachado:
Bom, há dois tipos de mapeamentos, o uni e o bidirecional.
É possível mapear tudo através do sabor, apenas.
Porém, se for necessário, você também deverá incluir um atributo do tipo List, de sabor, em ingrediente e adequar o mapeamento.

Como eu faria isso na prática nessa classe?

Criado 11 de abril de 2012
Ultima resposta 11 de abr. de 2012
Respostas 9
Participantes 3