Ola Pessoal estou com alguns problemas com Hibernate Annotations
Tenho as seguintes tabelas do banco:
Tabela Pessoa
campos:
id (integer,auto Increment)//chave primária
nome (varchar(45))
telefone (varchar(45))
Tabela Endereco
campos:
pessoa (integer,auto Increment) //chave primária e estrangeira que veio da tabela pessoa
rua (varchar(45))
bairro (varchar(45))
numero (integer)
Tenho as seguintes classes:
Classe Pessoa:
@Entity
public class Pessoa
{
private Integer id;
private String nome;
private String telefone;
private Endereco endereco;
public Pessoa()
{
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
@Column
public String getNome()
{
return nome;
}
public void setNome(String nome)
{
this.nome = nome;
}
@Column
public String getTelefone()
{
return telefone;
}
public void setTelefone(String telefone)
{
this.telefone = telefone;
}
public void setEndereco(Endereco endereco)
{
this.endereco = endereco;
}
@OneToOne(cascade = CascadeType.ALL)
public Endereco getEndereco()
{
return endereco;
}
}
Classe Endereço:
@Entity
public class Endereco
{
private Integer id;
private Pessoa pessoa;
private String rua;
private Integer numero;
private String bairro;
public Endereco()
{
}
@Id
@Column(name = "pessoa")
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
@Column
public String getBairro()
{
return bairro;
}
public void setBairro(String bairro)
{
this.bairro = bairro;
}
@Column
public int getNumero()
{
return numero;
}
public void setNumero(Integer numero)
{
this.numero = numero;
}
@Column
public String getRua()
{
return rua;
}
public void setRua(String rua)
{
this.rua = rua;
}
@OneToOne(cascade = CascadeType.ALL)
public Pessoa getPessoa()
{
return pessoa;
}
public void setPessoa(Pessoa pessoa)
{
this.pessoa = pessoa;
}
}
Classe de Teste:
import org.hibernate.Session;
import org.hibernate.Transaction;
public class Teste
{
public static void main(String[] args)
{
Session sessao = HibernateFactory.getSession(); // Abrindo uma sessao
Transaction transaction = sessao.beginTransaction(); // Iniciando uma transacao
Pessoa p1 = new Pessoa();
p1.setNome("Manuel de Oliveira"); // Preenchendo as propriedades do objeto
p1.setTelefone("5412158");
Endereco e1 = new Endereco();
e1.setBairro("Centro");
e1.setRua("Martins Francisco");
e1.setNumero(12);
p1.setEndereco(e1);
e1.setPessoa(p1);
sessao.save(p1); // Transformando o objeto transiente em um objeto persistente no banco de dados
transaction.commit(); // Finalizando a transacao
sessao.close(); // Fechando a sessa
}
}
O arquivo hibernate.properties:
hibernate.dialect = org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class = com.mysql.jdbc.Driver
hibernate.connection.url = jdbc:mysql://localhost/Banco
hibernate.connection.username = root
hibernate.connection.password = minha_senha
Estou usando o Hibernate 3.2 com o Hibernate Annotations, eclipse 3.2, MySQL 5, tudo no Ubuntu 6.06. Acontece o seguitente erro:
“ids for this class must be manually assigned before calling save(): Endereco”
se eu apenas savar o objeto pessoa (retirando o relacionamento entre a classe Pessoa e Endereco), funciona sem erro…