Boa noite pessoal do Guj.
Estou aqui novamente para pedir um auxílio pq já não sei mais o que fazer.
Tenho duas classes “Casa” e “Endereco” é um exemplo
O relacionamento entre elas é um para um.
Aqui vai o código das tabelas:
[quote]CREATE TABLE casa
(
id_casa int2 NOT NULL,
nome varchar(10),
CONSTRAINT casa_pkey PRIMARY KEY (id_casa)
)
CREATE TABLE endereco
(
id_endereco int2 NOT NULL,
id_casa int2,
rua varchar(10),
CONSTRAINT endereco_pkey PRIMARY KEY (id_endereco),
CONSTRAINT endereco_id_casa_fkey FOREIGN KEY (id_casa) REFERENCES casa (id_casa) )[/quote]
Agora vou demostrar as classes:
[quote]
@Entity
@Table(name=“endereco”)
@SequenceGenerator(name = “SEQ_END”, sequenceName = “seq_endereco”)
public class Endereco {
private Integer id_endereco;
private String rua;
private Casa casa;
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_END")
public Integer getId_endereco() {
return id_endereco;
}
@OneToOne(mappedBy = "endereco")
public Casa getCasa() {
return casa;
}
public String getRua() {
return rua;
}
public void setCasa(Casa casa) {
this.casa = casa;
}
public void setId_endereco(Integer id_endereco) {
this.id_endereco = id_endereco;
}
public void setRua(String rua) {
this.rua = rua;
}
@Table(name=“casa”)
@Entity
@SequenceGenerator(name = “SEQ_CLOG”, sequenceName = “seq_casa”)
public class Casa {
private Integer id_casa;
private String nome;
private Endereco endereco;
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
public Endereco getEndereco() {
return endereco;
}
public void setEndereco(Endereco endereco) {
this.endereco = endereco;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_CLOG")
public Integer getId_casa() {
return id_casa;
}
public String getNome() {
return nome;
}
public void setId_casa(Integer id_casa) {
this.id_casa = id_casa;
}
public void setNome(String nome) {
this.nome = nome;
}
}[/quote]
Bom quando tento incluir conforme o codigo abaixo gera o seguite erro:
[quote]
sessao = HibernateUtility.getSession();
Casa casa = new Casa();
Endereco ends= new Endereco();
ends.setRua("Rua do Verdao");
casa.setNome("Verdao");
casa.setEndereco(ends);
Transaction tx = sessao.beginTransaction();
sessao.save(casa);
sessao.flush();
tx.commit();[/quote]
Erro:
[quote]Exception in thread “main” org.hibernate.exception.DataException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:75)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:202)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:230)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1007)
at carro.regra.testes.TesteHibernate.teste(TesteHibernate.java:71)
at carro.regra.testes.TesteHibernate.main(TesteHibernate.java:20)
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 /* insert teste.tabela.Endereco */ insert into endereco (rua, id_endereco) values (Rua do Verdao, 19) foi abortada. Chame getNextException para ver a causa.
at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2396)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1257)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:334)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2455)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195)
… 7 more[/quote]
Pelo que eu vi ele não cria id_casa para incluir o Endereço…
Valeu pessoal pela atenção…
Muito obrigado mesmo.