Personas,
Tô tentando agora com relacionamento unidirecional entre cliente -> pedido e pedido -> produto, seguem minhas classes:
[code]package models;
import java.util.List;
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.OneToMany;
@Entity
public class Cliente {
@Id
@GeneratedValue
@Column(name="id_cliente")
private Long id;
@Column(name="nome_cliente")
private String nome;
@OneToMany
@JoinTable(name = "pedido", joinColumns = @JoinColumn(name = "id_cliente"), inverseJoinColumns = @JoinColumn(name= "id_pedido"))
private List<Pedido> pedidos;
public Cliente() {
}
public Cliente(Long id, String nome, List<Pedido> pedidos) {
this.id = id;
this.nome = nome;
this.pedidos = pedidos;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public List<Pedido> getPedidos() {
return pedidos;
}
public void setPedidos(List<Pedido> pedidos) {
this.pedidos = pedidos;
}
}[/code]
[code]package models;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Produto {
@Id
@GeneratedValue
@Column(name="id_produto")
private Long id;
@Column(name="nome_produto")
private String nome;
@Column(name="descricao_produto")
private String descricao;
@Column(name="preco_produto")
private double preco;
public Produto(String nome, String descricao, double preco) {
this.nome = nome;
this.descricao = descricao;
this.preco = preco;
}
public Produto() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public double getPreco() {
return preco;
}
public void setPreco(double preco) {
this.preco = preco;
}
}[/code]
[code]package models;
import java.util.List;
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.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
@Entity
public class Pedido {
@Id
@GeneratedValue
@Column(name="id_pedido")
private Long id;
@ManyToMany
@JoinTable(name = "pedido_produto", joinColumns = @JoinColumn(name = "id_pedido"), inverseJoinColumns = @JoinColumn(name= "id_produto"))
private List<Produto> produtos;
public Pedido() {
}
public Pedido(List<Produto> produtos) {
this.produtos = produtos;
}
public Pedido(Long id, List<Produto> produtos) {
super();
this.id = id;
this.produtos = produtos;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public List<Produto> getProdutos() {
return produtos;
}
public void setProdutos(List<Produto> produtos) {
this.produtos = produtos;
}
}[/code]
Tá tudo funcionando certinho agora, quando busco um cliente por nome no banco, já me vem a sua lista de pedidos, e dentro de cada linha da lista de pedidos, os produtos que estão neles.
Minha única dúvida é se não tô fazendo gambiarra. Essa é forma correta de relacionar estas 3 classes? Há algo a melhorar nesse relacionamento (quanto ao hibernate, apenas)?
Muito obrigado desde já. Abraços.