Bom dia galera. Estou vendo o hibernate e estou fazendo um teste e esta dando um erro.
More than one row with the given identifier was found: 1, for class: br.com.mgf.modelo.Pessoa
Mas no banco de dados nao tem mais que um registro com esse codigo.
mysql> select * from pessoa;
+----------+--------------------------+---------+--------------+--------------+
| idPessoa | email | nome | telefone | idEnderecoFk |
+----------+--------------------------+---------+--------------+--------------+
| 1 | [email removido] | Diego | 35-3522-2222 | 1 |
| 2 | [email removido] | Diego | 35-3522-2222 | 1 |
| 3 | [email removido] | Luciano | 35-3522-2222 | 3 |
+----------+--------------------------+---------+--------------+--------------+
3 rows in set (0.00 sec)
Na minha consulta esta assim.
package br.com.mgf.dao;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.mgf.modelo.Endereco;
import br.com.mgf.modelo.Pessoa;
import br.com.mgf.modelo.Professor;
import br.com.mgf.util.HibernateUtil;
public class Dao {
/**
* @param args
*/
private static final Transaction tx;
private static final Session session;
static{
session = new HibernateUtil().getSession();
tx = session.beginTransaction();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Professor professor = new Professor();
professor.setIdPessoa(2L);
professor = (Professor) new Dao().atualiza(professor);
session.save(professor);
tx.commit();
session.close();
}
public Pessoa atualiza(Pessoa pessoa){
Session session = new HibernateUtil().getSession();
Pessoa p = (Pessoa) session.get(Pessoa.class, pessoa.getIdPessoa());
System.out.println(p.getNome() + " " + p.getEndereco().getBairro());
Endereco endereco = null;
endereco = p.getEndereco();
endereco.setBairro("Penha");
p.setEndereco(endereco);
System.out.println(p.getNome() + " " + p.getEndereco().getBairro());
return p;
}
}
O meu Entity Pessoa e Professor estao relacionados pela herança.
package br.com.mgf.modelo;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import org.omg.PortableInterceptor.INACTIVE;
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "Pessoa")
public abstract class Pessoa implements Serializable {
private Long idPessoa;
private String nome;
private String email;
private String telefone;
private Endereco endereco;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "idEnderecoFk")
public Endereco getEndereco() {
return endereco;
}
public void setEndereco(Endereco endereco) {
this.endereco = endereco;
}
@Column(name = "email", length = 25)
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idPessoa")
public Long getIdPessoa() {
return idPessoa;
}
public void setIdPessoa(Long id) {
this.idPessoa = id;
}
@Column(name = "nome", length = 30)
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Column(name = "telefone", length = 15)
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public boolean equals(Object obj){
if (obj == null){
return false;
} else {
if (obj instanceof Pessoa){
return true;
} else {
return false;
}
}
}
public int hashCode(){
int resultado = 10;
resultado *= 20 + this.getIdPessoa().hashCode();
return resultado;
}
}
Entity Professor
package br.com.mgf.modelo;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.PrimaryKeyJoinColumn;
@Entity
public class Professor extends Pessoa implements Serializable {
private String graduacao;
@Column(name = "graduacao")
public String getGraduacao() {
return graduacao;
}
public void setGraduacao(String graduacao) {
this.graduacao = graduacao;
}
}
Espero que vcs me ajudem…