Opa, beleza?
Pessoal, estou com um problema que não consegui resolver, procurei aqui mesmo no fórum e também em outros, e nada de dar certo.
O problema é o seguinte, estou fazendo um relacionamento entre duas tabelas, OneToOne, porém não estou obtendo sucesso.
Tendo o script do bd desta maneira:
CREATE TABLE pessoa (
pessoa_id int(11) NOT NULL auto_increment,
pessoa_nome varchar(20) default NULL,
pessoa_idade int(3) default NULL,
PRIMARY KEY (pessoa_id)
);
CREATE TABLE filho (
pessoa_id int(11) default NULL,
filho_nome varchar(20) default NULL,
filho_idade int(3) default NULL,
FOREIGN KEY (pessoa_id) REFERENCES pessoa(pessoa_id),
PRIMARY KEY (pessoa_id)
);
(Imaginando aqui, que uma pessoa só pode ter um filho e um filho só pode der uma pessoa, tipo controle de natalidade rs)
E pelo que entendi a tabela filho não pode ter sua própria primary key por causa do hibernate.
Aqui estão as duas entidades:
Pessoa
[code]@Entity
@Table (name=“pessoa”)
public class Pessoa implements Serializable{
private static final long serialVersionUID = -634150680518715133L;
@Id
@GeneratedValue
@Column (name="pessoa_id")
private int id;
@Column (name="pessoa_nome")
private String nome;
@Column (name="pessoa_idade")
private int idade;
public Pessoa() {
}
public Pessoa (String nome, int idade) {
this.nome = nome;
this.idade = idade;
}
// getters and setters
[/code]
Filho
Aqui usei tanto @PrimaryKeyJoinColumn quanto @JoinColum e não funcionou.
[code]@Entity
@Table(name = “filho”)
public class Filho implements Serializable {
private static final long serialVersionUID = 7316391339209722238L;
@Id
@OneToOne
@PrimaryKeyJoinColumn(name = “pessoa_id”) //@JoinColumn(name = “pessoa_id”)
private Pessoa pessoa;
@Column(name = "filho_nome")
private String nome;
@Column(name = "filho_idade")
private int idade;
public Filho() {
}
public Filho(Pessoa pessoa, String nome, int idade, Set<Mae> mae) {
this.pessoa = pessoa;
this.nome = nome;
this.idade = idade;
this.mae = mae;
}
[/code]
Aqui a classe Teste:
[code]
public class Teste {
private static Session sessao = HibernateUtil.getSessionFactory()
.openSession();
public static void main(String[] args) {
Transaction t = sessao.beginTransaction();
try {
Pessoa pessoa = new Pessoa();
pessoa.setNome("João");
pessoa.setIdade(49);
sessao.save(pessoa);
Filho filho = new Filho();
filho.setPessoa(pessoa);
filho.setNome("Gabriel");
filho.setIdade(22);
sessao.save(filho);
t.commit();
} catch (Exception e) {
t.rollback();
e.printStackTrace();
} finally {
sessao.close();
}
}
}[/code]
O erro é o seguinte:
Hibernate: insert into pessoa (pessoa_nome, pessoa_idade) values (?, ?)
Hibernate: insert into filho (filho_nome, filho_idade, pessoa) values (?, ?, ?)
1877 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1054, SQLState: 42S22
1877 [main] ERROR org.hibernate.util.JDBCExceptionReporter - Unknown column 'pessoa' in 'field list'
org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
Alguém poderia me ajudar dando uma luz de onde estou cometendo o equivoco?
Valeu galera, desde já obrigado :!: