[size=18]Produto.java[/size]
[code]package br.com.tomazlavieri.model;
import java.io.Serializable;
import javax.persistence.*;
@Entity
public class Produto implements Serializable {
private static final long serialVersionUID = 306116498256151785L;
private Integer id;
private String nome;
@Id
@GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Override
public int hashCode() {
if (getNome() == null)
return super.hashCode();
final int prime = 7;
int result = 1;
result = prime * result + nome.hashCode();
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (getNome() == null)
return false;
if (!(obj instanceof Produto))
return false;
Produto other = (Produto) obj;
return getNome().equals(other.getNome());
}
@Override
public String toString() {
return getNome();
}
}[/code]
[size=18]Pedido.java[/size]
[code]package br.com.tomazlavieri.model;
import java.io.Serializable;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.*;
import static javax.persistence.CascadeType.ALL;
import static javax.persistence.TemporalType.TIMESTAMP;
@Entity
public class Pedido implements Serializable {
private static final long serialVersionUID = -8514647334843363802L;
private Integer id;
private Date data;
private Set<ItemPedido> itens = new HashSet<ItemPedido>();
public Pedido() {
super();
}
@Id
@GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@OneToMany(mappedBy="pedido", cascade = ALL)
protected Set<ItemPedido> getItens() {
return itens;
}
/**
* Resgata a lista somente leitura dos pedidos.
* @return
*/
@Transient
public Set<ItemPedido> getItensRO() {
return Collections.unmodifiableSet(getItens());
}
/**
* Adiciona um item ao pedido
* @param produto
* @param quantidade
* @return
*/
@Transient
public ItemPedido addItem(Produto produto, int quantidade) {
ItemPedido item = new ItemPedido(this,produto,quantidade);
getItens().add(item);
return item;
}
/**
* Remove um item do pedido
* @param produto
* @return
*/
@Transient
public boolean remove(Produto produto) {
ItemPedido item = new ItemPedido(this,produto,0);
return getItens().remove(item);
}
protected void setItens(Set<ItemPedido> itens) {
this.itens = itens;
}
@PrePersist
@Transient
public void prePersist() {
setData(new Date());
}
@Temporal(TIMESTAMP)
@Column(updatable = false) public Date getData() {
return data;
}
public void setData(Date data) {
this.data = data;
}
@Override
public int hashCode() {
if (getId() == null)
return super.hashCode();
final int prime = 11;
int result = 1;
result = prime * result + getId().hashCode();
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (getId() == null)
return false;
if (!(obj instanceof Pedido))
return false;
Pedido other = (Pedido) obj;
return getId().equals(other.getId());
}
@Override
public String toString() {
return String.valueOf(getId());
}
}[/code]
[size=18]ItemPedido.java[/size]
[code]package br.com.tomazlavieri.model;
import java.io.Serializable;
import javax.persistence.*;
@Entity
@IdClass(ItemPedidoPK.class)
public class ItemPedido implements Serializable {
private static final long serialVersionUID = -7759835629199252623L;
private static final String TO_STRING = “[pedido = %s , produto = %s , quantidade = %d]”;
private Produto produto;
private Pedido pedido;
private Integer quantidade;
public ItemPedido() {
super();
}
public ItemPedido(Pedido p,Produto produto, int quantidade) {
setPedido(p);
setProduto(produto);
setQuantidade(quantidade);
}
@Id
@ManyToOne
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
@Id
@ManyToOne
public Pedido getPedido() {
return pedido;
}
public void setPedido(Pedido pedido) {
this.pedido = pedido;
}
public Integer getQuantidade() {
return quantidade;
}
public void setQuantidade(Integer quantidade) {
this.quantidade = quantidade;
}
@Override
public int hashCode() {
if (getProduto() == null || getPedido() == null)
return super.hashCode();
final int prime = 13;
int result = 1;
result = prime * getPedido().hashCode();
result = prime * getProduto().hashCode();
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (getPedido() == null || getProduto() == null)
return false;
if (!(obj instanceof ItemPedido))
return false;
ItemPedido other = (ItemPedido) obj;
return getProduto().equals(other.getProduto()) &&
getPedido().equals(other.getPedido());
}
@Override
public String toString() {
return String.format(TO_STRING, getPedido(),getProduto(),getQuantidade());
}
}[/code]
[size=18]ItemPedidoPK.java[/size]
[code]@Embeddable
public class ItemPedidoPK implements Serializable {
private static final long serialVersionUID = 6958675790304225564L;
private Pedido pedido;
private Produto produto;
public ItemPedidoPK() {
super();
}
@ManyToOne
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
@ManyToOne
public Pedido getPedido() {
return pedido;
}
public void setPedido(Pedido pedido) {
this.pedido = pedido;
}
@Override
public int hashCode() {
if (getProduto() == null || getPedido() == null)
return super.hashCode();
final int prime = 17;
int result = 1;
result = prime * getPedido().hashCode();
result = prime * getProduto().hashCode();
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (getPedido() == null || getProduto() == null)
return false;
if (!(obj instanceof ItemPedido))
return false;
ItemPedidoPK other = (ItemPedidoPK) obj;
return getProduto().equals(other.getProduto()) &&
getPedido().equals(other.getPedido());
}
}[/code]