Pessoal,
Estou obtendo o seguinte erro do hibernate:
More than one row with the given identifier was found: 1, for class: camisas.modelo.Pedido
Ja dei uma pesquisada e vi que poderia ser a integridade referencial do meu Bd, revi e não achei erro, até porque na minha tabela pedido a PK nao esta repetida, apenas as FK. Vi que podia ser problemas com hashCode e equals, implementei e nada tambem. Estava tudo funcionando, pois soh tinha um pedido de cada usuario, quando gerei um segundo pedido para um determinado usuario, começou a dar isso, por favor, conto com a ajuda de voces, tenho que entregar esse projeto amanha.
Minhas entidades:
Pedidopackage camisas.modelo;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import javax.persistence.TemporalType;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
@Entity
@Table(name = "pedido", schema = "camisas")
public class Pedido implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "camisa", referencedColumnName = "id", insertable = true, updatable = true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.ALL)
private Camisa camisa;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "usuario", referencedColumnName = "id", insertable = true, updatable = true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.ALL)
private PessoaFisica usuario;
@Temporal(TemporalType.DATE)
@Column(name = "data_pedido")
private Date data;
@Column(name = "valor_total")
private int valorTotal;
@OneToOne
@JoinColumn(name = "forma_pgto", referencedColumnName = "id", insertable = true, updatable = true)
@Cascade(CascadeType.ALL)
private FormaPagamento formaPagamento;
@Column(name = "situacao")
private String situacao;
public Pedido() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Camisa getCamisa() {
return camisa;
}
public void setCamisa(Camisa camisa) {
this.camisa = camisa;
}
public Date getData() {
return data;
}
public void setData(Date data) {
this.data = data;
}
public PessoaFisica getUsuario() {
return usuario;
}
public void setUsuario(PessoaFisica usuario) {
this.usuario = usuario;
}
public int getValorTotal() {
return valorTotal;
}
public void setValorTotal(int valorTotal) {
this.valorTotal = valorTotal;
}
public FormaPagamento getFormaPagamento() {
return formaPagamento;
}
public void setFormaPagamento(FormaPagamento formaPagamento) {
this.formaPagamento = formaPagamento;
}
public String getSituacao() {
return situacao;
}
public void setSituacao(String situacao) {
this.situacao = situacao;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Pedido other = (Pedido) obj;
if (this.id != other.id) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 7;
hash = 17 * hash + this.id;
return hash;
}
}
package camisas.modelo;
import java.io.Serializable;
import java.util.Collection;
import javax.persistence.*;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
@Entity
@Table(name = "usuario", schema = "camisas")
@PrimaryKeyJoinColumn(name = "pessoa_fisica")
public class Usuario extends PessoaFisica implements Serializable {
@Column(name = "login")
private String login;
@Column(name = "senha")
private String senha;
@Column(name = "ativo")
private String ativo;
@OneToMany(mappedBy = "usuario", fetch = FetchType.LAZY)
@Cascade(CascadeType.ALL)
private Collection<Pedido> pedidos;
public Usuario() {
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public String getAtivo() {
return ativo;
}
public void setAtivo(String ativo) {
this.ativo = ativo;
}
public Collection<Pedido> getPedidos() {
return pedidos;
}
public void setPedidos(Collection<Pedido> pedidos) {
this.pedidos = pedidos;
}
}
package camisas.dao;
import camisas.modelo.Pedido;
import camisas.modelo.Usuario;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
public class PedidoDAO extends GenericDAO<Pedido> {
public PedidoDAO(Session session, Class<?> classe) {
super(session, classe);
}
public Pedido carregarPedidoPeloId(int id) {
Criteria c = session.createCriteria(Pedido.class);
c.add(Restrictions.eq("id", id));
return (Pedido) c.uniqueResult();
}
public List<Pedido> listarPedidosDoUsuario(int idUser) {
Criteria c = session.createCriteria(Pedido.class);
UsuarioDAO usuarioDao = new UsuarioDAO(session, Usuario.class);
Usuario usuario = usuarioDao.carregarUsuarioPeloId(idUser);
Criterion _pedido = Restrictions.eq("usuario", usuario);
c.add(_pedido);
return c.list();
}
}
Estou ha tanto tempo em cima desse erro que nem sei mais o que faço, se precisarem de outras classes, me falem, por favor, nao sei nem o que colcoar aqui.
Minha tabela pedido esta assim:
id int PK
camisa int FK referenciando a tabela camisa
usuario int FK referenciando a tabela usuario
data date
valor int
situacao varchar
Desde ja agradeço