Help... hibernate

Olá… Faz dois dias que estou com esse maldito erro no Hibernate:
javax.persistence.RollbackException: Error while commiting the transaction
.
.
.

Caused by: org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
.
.
.
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into grupo (ds_grp, cd_grp) values (Teste, 2) foi abortada.
.
.
.

O erro acontece qndo chama em.getTransaction().commit() e em.getTransaction.rollback().

Por favor, alguem me ajude.

Estou usando:

hibernate-3.2.6.ga
hibernate-annotations-3.3.1.GA
hibernate-commons-annotations-3.0.0.GA
hibernate-entitymanager-3.3.2.GA

Banco de Dados PostgrSQL 8.

já verificou se está funcionando a sua conexão com o banco, tipo… o driver está instanciado corretamente no seu projeto? … pelo que dá pra ver aí… ele não está conseguindo salvar seus dados no banco…

Caused by: org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update . . . Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into grupo (ds_grp, cd_grp) values (Teste, 2) foi abortada.

erro na sua query SQL kra!

verifica ela certinho ou cola o código e isso dai nao é um update e sim um insert no caso vc teria que colocar uma query de update.

ou pode ser também que vc tenha fechado a sessão antes de dar o comit()… poste o método que vc usa para salvar os dados na base pra verificarmos

O código que eu to usando é o gerado pelo NetBeans

public void inserirGrupo(GrupoVO grupo){
grupoBean = new Grupo();
grupoBean.setDsGrp(grupo.getDsGrupo());
EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("sicta");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();

try{
em.persist(grupoBean);
em.getTransaction().commit();
} catch(Exception e){
e.printStackTrance();
em.getTransaction().rollback();
}finally{
em.close();
}

}

O drive do postgres esta na minha biblioteca…
E o NetBeans ta conectado com o banco.
Vou tentar fazer uma insercao via JDBC puro pra ve se o drive ta funcionando certo msmo.

valeu galera… se alguem mais tiver alguma sugestao pra resolver esse problema pode mandar equanto eu testo com SQL.

Cara já sofri com este erro,
não sei se te ajuda, mas eu uso o BD postgresql e está excessão era lançada quando eu tentava inserir um registro em uma tabela e alguma constraint era violada (tipo unique em algum campo),
para resolver o problema atualizei o driver do postgresql e utilizando o método getMessage() da excessão pude verificar qual era a constraint violada.

opa… valeu… vou atualizar o drive…
estou usando o drive que ja veio no netbeans…
se der certo posto eu posto ai…
valeu prbpedro

Bom dia galera…
Eu tive esses problemas, por favor de uma olhada nos seguintes itens:
1º- Como vc está usando annotations por favor verifique se está gerando o Id certo.
ps. O postgres é necessario obter o sequence.

 @Entity
 @SequenceGenerator(name = "SEQ_CLOG", sequenceName = "seq_casa")
 public class Casa {
 @Id
 @GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_CLOG")
 private int id;
            

                           [/code]
2º-  Testa o codigo dessa forma:
[code]public void inserirGrupo(GrupoVO grupo){   

try{ 
   grupoBean = new Grupo();   
   grupoBean.setDsGrp(grupo.getDsGrupo());   

   EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("sicta");   
   EntityManager em = emf.createEntityManager();   
   
   em.getTransaction().begin();     
   em.persist(grupoBean);   
   em.flush();
   em.getTransaction().commit(); 
   em.clear();  

   } catch(Exception e){   
        e.printStackTrance();   
        em.getTransaction().rollback();   
   }finally{   
        em.close();   
}   
 Caso não funcione por favor manda os Entity para dar uma olhada.

Valeu. :slight_smile: :smiley:

Fazendo

o erro mudou:
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: Could not excute JDBC batch update
.
.
.

Caused by: org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
.
.
.
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into grupo (ds_grp, cd_grp) values (Teste, 2) foi abortada.
.
.
.

Apontando para em.flush() .

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package SICTa.SICTaPersistencia.tcc.ia.sicta.bean;

import java.io.Serializable;
import java.util.Collection;
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.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
*

  • @author Allan
    */
    @Entity
    @Table(name = “grupo”)
    @SequenceGenerator(name=“conhecimento.grupo_cd_grp_seq”, sequenceName=“conhecimento.grupo_cd_grp_seq”)
    @NamedQueries({@NamedQuery(name = “Grupo.findByCdGrp”, query = “SELECT g FROM Grupo g WHERE g.cdGrp = :cdGrp”), @NamedQuery(name = “Grupo.findByDsGrp”, query = “SELECT g FROM Grupo g WHERE g.dsGrp = :dsGrp”)})
    public class Grupo implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO, generator = “conhecimento.grupo_cd_grp_seq”)
    @Column(name = “cd_grp”, nullable=true)
    private Integer cdGrp;
    @Column(name = “ds_grp”)
    private String dsGrp;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = “cdGrp”)
    private Collection subgrupoCollection;

    public Grupo() {
    }

    public Grupo(Integer cdGrp) {
    this.cdGrp = cdGrp;
    }

    public Integer getCdGrp() {
    return cdGrp;
    }

    public void setCdGrp(Integer cdGrp) {
    this.cdGrp = cdGrp;
    }

    public String getDsGrp() {
    return dsGrp;
    }

    public void setDsGrp(String dsGrp) {
    this.dsGrp = dsGrp;
    }

    public Collection getSubgrupoCollection() {
    return subgrupoCollection;
    }

    public void setSubgrupoCollection(Collection subgrupoCollection) {
    this.subgrupoCollection = subgrupoCollection;
    }

    @Override
    public int hashCode() {
    int hash = 0;
    hash += (cdGrp != null ? cdGrp.hashCode() : 0);
    return hash;
    }

    @Override
    public boolean equals(Object object) {
    // TODO: Warning - this method won’t work in the case the id fields are not set
    if (!(object instanceof Grupo)) {
    return false;
    }
    Grupo other = (Grupo) object;
    if ((this.cdGrp == null && other.cdGrp != null) || (this.cdGrp != null && !this.cdGrp.equals(other.cdGrp))) {
    return false;
    }
    return true;
    }

    @Override
    public String toString() {
    return “SICTa.SICTaPersistencia.tcc.ia.sicta.bean.Grupo[cdGrp=” + cdGrp + “]”;
    }

}
[/code]


esse erro nao pode ser pq as tabelas estao no schema conhecimento eu nao no public padrao???

AHEEE… problema resolvido…
era isso mesmo… eu coloque o nome da entindade na annotation como “conhecimento.grupo”… FUNCIONOU…

[code]# @Entity

@Table(name = “conhecimento.grupo”) [/code]