Iniciante Hibernate

9 respostas
robinsonbsilva

Senhores(as), estou usando hibernate com postgresql e ao “tentar” inserir um registro o seguinte erro é apresentado:

Hibernate: select nextval ('empresa_id_empresa_seq')
Hibernate: select nextval ('endereco_id_endereco_seq')
Hibernate: insert into endereco (bairro, cep, cidade, complemento, data_excluido, id_empresa, estado, excluido, id_funcionario_exclusao, logradouro, id_endereco) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
br.com.unitelco.exception.DAOException: org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update

Abaixo segue as Classes

@Entity
@Table(name="endereco")
@SequenceGenerator(name = "endereco_id_endereco_seq", sequenceName = "endereco_id_endereco_seq")
public class Endereco implements Serializable {

    @Column(name = "id_empresa")
    private Empresa empresa;

    @Id
    @Column(name="id_endereco")
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="endereco_id_endereco_seq")
    private Integer idEndereco;

    @Column(name="logradouro")
    private String logradouro;

    @Column(name="bairro")
    private String bairro;

    @Column(name="cidade")
    private String cidade;

    @Column(name="estado")
    private String estado;

    @Column(name="cep")
    private String cep;

    @Column(name="complemento")
    private String complemento;

    @Column(name="data_excluido")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataExcluido;

    @Column(name="excluido")
    private Integer excluido = 0;

    @Column(name="id_funcionario_exclusao")
    private Integer idFuncionarioExclusao = 0;
   
    //get e set
}


@Entity
@Table(name="empresa")
@SequenceGenerator(name = "empresa_id_empresa_seq", sequenceName = "empresa_id_empresa_seq")
public class Empresa implements Serializable {

    @Id
    @Column(name="id_empresa")
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="empresa_id_empresa_seq")
    private Integer idEmpresa;

    @Column(name="razao_social")
    private String razaoSocial;

    @Column(name="nome_fantasia")
    private String nomeFantasia;

    @Column(name="cnpj")
    private String cnpj;

    @OneToOne(cascade={CascadeType.ALL})
    @JoinColumn(name = "id_endereco")
    private Endereco endereco;

    @Column(name="data_excluido")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataExcluido;

    @Column(name="excluido")
    private Integer excluido = 0;

    @Column(name="id_funcionario_exclusao")
    private Integer idFuncionarioExclusao = 0;

    //get e set
}

script base dados

CREATE TABLE empresa(
   id_empresa serial NOT NULL,
   razao_social varchar(80),
   nome_fantasia varchar(80),
   cnpj varchar(18),
   id_endereco int,
   data_excluido date,
   excluido int,
   id_funcionario_exclusao int,
   CONSTRAINT pk_empresa PRIMARY KEY (id_empresa)
);

CREATE TABLE endereco(
   id_empresa int NOT NULL,
   id_endereco serial NOT NULL,
   logradouro varchar(45),
   bairro varchar(45),
   cidade varchar(45),
   estado varchar(2),
   cep varchar(9),
   complemento varchar(50),
   data_excluido date,
   excluido int,
   id_funcionario_exclusao int,
   CONSTRAINT pk_endereco PRIMARY KEY (id_empresa, id_endereco)
);

Desde já agradeço.

9 Respostas

tnaires

É preciso mostrar mais detalhes do erro, poste aqui toda a stack trace gerada pela exceção.

LPJava

veja se os topicos abaixo ajuda vc encontrar os erros:
http://blog.camilolopes.com.br/?p=1228

Hibernate java

abracos,

Andr_Heidi_Moriya

Olá pessoal

estou tendo um erro parecido com esse!
Criei uma classe endereco e uma classe Pessoa e mais uma classe Cliente que herda de Pessoa.

bem estou tentando fazer um relacionamento de @OneToOne nas classes Pessoa e na endereco.

@Inheritance(strategy=InheritanceType.JOINED)
@MappedSuperclass
public class Pessoa implements Serializable {

    //Alguns atributos abstraidos!! hehehe

    @JoinColumn(name = "codendereco", referencedColumnName = "codendereco")
    @OneToOne
    private Endereco<Pessoa> codendereco = new Endereco<Pessoa>();

    //Metodos Setters e Getters

}
@Entity
@Table(name = "Endereco", schema = "public")
public class Endereco implements Serializable {

    // Atributos....

    @OneToOne(mappedBy = "codendereco")
    private List<Pessoa> pessoaList;

}
@Entity
@AttributeOverride(name="codigo",column=@Column(name="codclie"))
@PrimaryKeyJoinColumn(referencedColumnName="codigo")
public class Cliente extends Pessoa implements Serializable {

    @Column(nullable=false)
    private Character tipoPessoa;    
    
    public Character getTipoPessoa() {
        return tipoPessoa;
    }

    public void setTipoPessoa(Character tipoPessoa) {
        this.tipoPessoa = tipoPessoa;
    }

}

Naum sei porque que na hora que vou testar essas classes ele da o seguinte erro
Initial SessionFactory creation failed.org.hibernate.AnnotationException: Unknown mappedBy in: org.sis4j.corretora.db.modelo.Endereco.pessoaList, referenced property unknown: java.util.List.codendereco

Alguem sabe o pq desse erro??

obrigado

tnaires

O problema é que você está mapeando um relacionamento um para um, mas a classe Endereco possui uma lista de objetos do tipo Pessoa. Mude a declaração List para Pessoa ou então faça um relacionamento um para muitos / muitos para um entre Pessoa e Endereco.

robinsonbsilva

Bom dia tnaires,

Segue o stacktrace completo:

Hibernate: select nextval ('empresa_id_empresa_seq')
Hibernate: select nextval ('endereco_id_endereco_seq')
Hibernate: insert into endereco (bairro, cep, cidade, complemento, data_excluido, id_empresa, estado, excluido, id_funcionario_exclusao, logradouro, id_endereco) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
br.com.unitelco.exception.DAOException: org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
        at br.com.unitelco.dao.hibernate.EmpresaDAOHibernate.save(EmpresaDAOHibernate.java:94)
        at br.com.unitelco.testes.Teste.main(Teste.java:29)
Caused by: org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
        at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
        at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:114)
        at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109)
        at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:244)
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2242)
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2678)
        at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79)
        at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
        at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1028)
        at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:366)
        at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
        at br.com.unitelco.dao.hibernate.EmpresaDAOHibernate.save(EmpresaDAOHibernate.java:91)
        ... 1 more
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into endereco (bairro, cep, cidade, complemento, data_excluido, id_empresa, estado, excluido, id_funcionario_exclusao, logradouro, id_endereco) values (Consolação, 0130-300, São Paulo, Próximo a bela cintra, NULL, NULL, SP, 0, 0, Avenida Paulista, 2444, 700) foi abortada. Chame getNextException para ver a causa.
        at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2387)
        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:2446)
        at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
        at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
        ... 16 more
BUILD SUCCESSFUL (total time: 1 second)
Scoobydoo

Primeiro, Substitua

@Column(name = "id_empresa") private Empresa empresa;

por

@JoinColumn(name = "id_empresa", nullable = false) private Empresa empresa;

Scoobydoo

coloque em seu banco o Id_empresa como FK

Scoobydoo

insert into endereco (bairro, cep, cidade, complemento, data_excluido, id_empresa, estado, excluido, id_funcionario_exclusao, logradouro, id_endereco) values (Consolação, 0130-300, São Paulo, Próximo a bela cintra, NULL, NULL, SP, 0, 0, Avenida Paulista, 2444, 700)

Olha… se você ver o Id_Empresa da Indo para o Banco como Null…
E você setou no seu Banco de dados que o id_empresa não pode ser Null…

robinsonbsilva

Bom dia,

Mudei conforme sugestão, mas continua o mesmo erro:

@Entity
@Table(name="endereco")
@SequenceGenerator(name = "endereco_id_endereco_seq", sequenceName = "endereco_id_endereco_seq")
public class Endereco implements Serializable {

    @JoinColumn(name = "id_empresa")
    private Empresa empresa;

    @Id
    @Column(name="id_endereco")
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="endereco_id_endereco_seq")
    private Integer idEndereco;

    @Column(name="logradouro")
    private String logradouro;

    @Column(name="bairro")
    private String bairro;

    @Column(name="cidade")
    private String cidade;

    @Column(name="estado")
    private String estado;

    @Column(name="cep")
    private String cep;

    @Column(name="complemento")
    private String complemento;

    @Column(name="data_excluido")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataExcluido;

    @Column(name="excluido")
    private Integer excluido = 0;

    @Column(name="id_funcionario_exclusao")
    private Integer idFuncionarioExclusao = 0;
}

@Entity
@Table(name="empresa")
@SequenceGenerator(name = "empresa_id_empresa_seq", sequenceName = "empresa_id_empresa_seq")
public class Empresa implements Serializable {

    @Id
    @Column(name="id_empresa")
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="empresa_id_empresa_seq")
    private Integer idEmpresa;

    @Column(name="razao_social")
    private String razaoSocial;

    @Column(name="nome_fantasia")
    private String nomeFantasia;

    @Column(name="cnpj")
    private String cnpj;

    @OneToOne(cascade={CascadeType.ALL})
    @JoinColumn(name = "id_endereco")
    private Endereco endereco;

    @Column(name="data_excluido")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataExcluido;

    @Column(name="excluido")
    private Integer excluido = 0;

    @Column(name="id_funcionario_exclusao")
    private Integer idFuncionarioExclusao = 0;
}
br.com.unitelco.exception.DAOException: org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
        at br.com.unitelco.dao.hibernate.EmpresaDAOHibernate.save(EmpresaDAOHibernate.java:94)
        at br.com.unitelco.testes.Teste.main(Teste.java:29)
Caused by: org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
        at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
        at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:114)
        at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109)
        at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:244)
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2242)
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2678)
        at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79)
        at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
        at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1028)
        at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:366)
        at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
        at br.com.unitelco.dao.hibernate.EmpresaDAOHibernate.save(EmpresaDAOHibernate.java:91)
        ... 1 more
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into endereco (bairro, cep, cidade, complemento, data_excluido, empresa, estado, excluido, id_funcionario_exclusao, logradouro, id_endereco) values (Consolação, 0130-300, São Paulo, Próximo a bela cintra, NULL, NULL, SP, 0, 0, Avenida Paulista, 2444, 750) foi abortada. Chame getNextException para ver a causa.
        at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2387)
        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:2446)
        at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
        at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
        ... 16 more
Criado 26 de janeiro de 2010
Ultima resposta 27 de jan. de 2010
Respostas 9
Participantes 5