Erro no Hibernate

8 respostas
danielti

Pessoal,

Bom dia. Estou tentando identificar onde ocorre um erro no meu software.
Quando tento executar o seguinte remove:

if (funcao.equals("remove")) {
            String id = request.getParameter("id");
            int idint = Integer.parseInt(id.trim());          
            pesquisaDao = em.find(Pesquisa.class, idint); 
            em.remove(pesquisaDao);            
            System.err.println("Pesquisa: " + id);
            try {
                em.getTransaction().begin();
                em.getTransaction().commit();
            } catch (Exception e) {
                System.err.println("Erro :" + e.getMessage());
            }

Eu vejo o seguinte erro na console e o registro não é removido :

Pesquisa: 96 --> esse é o id do registro que quero remover.

[TopLink Warning]: 2008.09.30 09:56:09.853UnitOfWork(22364723)Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.DatabaseException

Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column t0.pesquisaidCollection_id in 'where clause

Error Code: 1054

Call: SELECT <a href="http://t1.id">t1.id</a>, t1.num_filhos, t1.endereco, t1.nome, t1.bairro, t1.senha, t1.cidade, t1.sexo, t1.estado, t1.renda, t1.telefone, t1.compl, t1.email, t1.login, t1.estado_civil, t1.CEP, t1.grupo_usuario_id FROM Pesquisa_Usuario t0, Usuario t1 WHERE ((t0.pesquisaidCollection_id = ?) AND (<a href="http://t1.id">t1.id</a> = t0.usuarioidCollection_id))

bind => [96]

Query: ReadAllQuery(entidades.Usuario)

Erro :Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.DatabaseException

Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column t0.pesquisaidCollection_id in 'where clause

Error Code: 1054

Call: SELECT <a href="http://t1.id">t1.id</a>, t1.num_filhos, t1.endereco, t1.nome, t1.bairro, t1.senha, t1.cidade, t1.sexo, t1.estado, t1.renda, t1.telefone, t1.compl, t1.email, t1.login, t1.estado_civil, t1.CEP, t1.grupo_usuario_id FROM Pesquisa_Usuario t0, Usuario t1 WHERE ((t0.pesquisaidCollection_id = ?) AND (<a href="http://t1.id">t1.id</a> = t0.usuarioidCollection_id))

bind => [96]

Query: ReadAllQuery(entidades.Usuario)

A tabela Pesquisa_Usuario existe no banco, está sendo referenciada pela classe PesquisaUsuario.
Já pesquisei o código inteiro e não achei esse texto : t0.pesquisaidCollection_id mencionado no erro.

Obrigado pela atenção,

8 Respostas

gui_sv

Opa…

Semana passada eu estava fazendo algo parecido … mas por eu usar HIbernate a log foi um pouco diferente !! …

mas eu tava colocando o manager.merge(obj); fora de uma transaction …

entao faça o seguinte … coloca o metod remove(…) dentro do try{ entre os begin() e commit() transaction.

if (funcao.equals("remove")) {
            String id = request.getParameter("id");
            int idint = Integer.parseInt(id.trim());          
            pesquisaDao = em.find(Pesquisa.class, idint); 

            System.err.println("Pesquisa: " + id);
            try {
                em.getTransaction().begin();

            em.remove(pesquisaDao);            ////////////////////////////////////////////////////////////////////////////////

                em.getTransaction().commit();
            } catch (Exception e) {
                System.err.println("Erro :" + e.getMessage());
            }

nao sei ao certo se é isso …

A linha … System.err.println("Pesquisa: " + id); imprime 96 ???

danielti

Isso, a linha imprime na console o índice da pesquisa. Fiz isso para ter certeza que estou recebendo os dados da aplicação cliente de maneira correta.
Não funcionou colocar o remove entre o begin e o commit…
O erro ainda persiste.

Obrigado,

gui_sv

Quais sao os seu objetos ??

Posta ai a classe Pesquisa.java

valw

danielti

Tá aí:

package entidades;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author danielti
 */
@Entity
@Table(name = "Pesquisa")
@NamedQueries({@NamedQuery(name = "Pesquisa.findById", query = "SELECT p FROM Pesquisa p WHERE p.id = :id"), @NamedQuery(name = "Pesquisa.findByNome", query = "SELECT p FROM Pesquisa p WHERE p.nome = :nome"), @NamedQuery(name = "Pesquisa.findByDescricao", query = "SELECT p FROM Pesquisa p WHERE p.descricao = :descricao"), @NamedQuery(name = "Pesquisa.findByDataInicio", query = "SELECT p FROM Pesquisa p WHERE p.dataInicio = :dataInicio"), @NamedQuery(name = "Pesquisa.findByHoraInicio", query = "SELECT p FROM Pesquisa p WHERE p.horaInicio = :horaInicio"), @NamedQuery(name = "Pesquisa.findByDataFim", query = "SELECT p FROM Pesquisa p WHERE p.dataFim = :dataFim"), @NamedQuery(name = "Pesquisa.findByHoraFim", query = "SELECT p FROM Pesquisa p WHERE p.horaFim = :horaFim"), @NamedQuery(name = "Pesquisa.findByUrlBanner", query = "SELECT p FROM Pesquisa p WHERE p.urlBanner = :urlBanner"), @NamedQuery(name = "Pesquisa.findByUsuario", query = "SELECT p FROM Pesquisa p WHERE p.usuario = :usuario"), @NamedQuery(name = "Pesquisa.findByEndereco", query = "SELECT p FROM Pesquisa p WHERE p.endereco = :endereco"), @NamedQuery(name = "Pesquisa.findByBairro", query = "SELECT p FROM Pesquisa p WHERE p.bairro = :bairro"), @NamedQuery(name = "Pesquisa.findByCidade", query = "SELECT p FROM Pesquisa p WHERE p.cidade = :cidade"), @NamedQuery(name = "Pesquisa.findByCep", query = "SELECT p FROM Pesquisa p WHERE p.cep = :cep"), @NamedQuery(name = "Pesquisa.findByEstado", query = "SELECT p FROM Pesquisa p WHERE p.estado = :estado"), @NamedQuery(name = "Pesquisa.findByTelefone", query = "SELECT p FROM Pesquisa p WHERE p.telefone = :telefone"), @NamedQuery(name = "Pesquisa.findByPublicar", query = "SELECT p FROM Pesquisa p WHERE p.publicar = :publicar"), @NamedQuery(name = "Pesquisa.findByEmail", query = "SELECT p FROM Pesquisa p WHERE p.email = :email"), @NamedQuery(name = "Pesquisa.findBySugestao", query = "SELECT p FROM Pesquisa p WHERE p.sugestao = :sugestao"), @NamedQuery(name = "Pesquisa.findByUrlLink", query = "SELECT p FROM Pesquisa p WHERE p.urlLink = :urlLink"), @NamedQuery(name = "Pesquisa.findByExigeLogin", query = "SELECT p FROM Pesquisa p WHERE p.exigeLogin = :exigeLogin"), @NamedQuery(name = "Pesquisa.findByIdentificacao", query = "SELECT p FROM Pesquisa p WHERE p.identificacao = :identificacao"), @NamedQuery(name = "Pesquisa.findByLoginAnonimo", query = "SELECT p FROM Pesquisa p WHERE p.loginAnonimo = :loginAnonimo")})
public class Pesquisa implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "id", nullable = false)
    private Integer id;
    @Column(name = "nome")
    private String nome;
    @Column(name = "descricao")
    private String descricao;
    @Column(name = "data_inicio")
    @Temporal(TemporalType.DATE)
    private Date dataInicio;
    @Column(name = "hora_inicio")
    @Temporal(TemporalType.TIME)
    private Date horaInicio;
    @Column(name = "data_fim")
    @Temporal(TemporalType.DATE)
    private Date dataFim;
    @Column(name = "hora_fim")
    @Temporal(TemporalType.TIME)
    private Date horaFim;
    @Column(name = "url_banner")
    private String urlBanner;
    @Column(name = "usuario")
    private Character usuario;
    @Column(name = "endereco")
    private Character endereco;
    @Column(name = "bairro")
    private Character bairro;
    @Column(name = "cidade")
    private Character cidade;
    @Column(name = "cep")
    private Character cep;
    @Column(name = "estado")
    private Character estado;
    @Column(name = "telefone")
    private Character telefone;
    @Column(name = "publicar")
    private Character publicar;
    @Column(name = "email")
    private Character email;
    @Column(name = "sugestao")
    private Character sugestao;
    @Column(name = "url_link")
    private String urlLink;
    @Column(name = "exige_login")
    private Character exigeLogin;
    @Column(name = "identificacao")
    private Character identificacao;
    @Column(name = "login_anonimo")
    private Character loginAnonimo;
    @JoinTable(name = "Pesquisa_grupo", joinColumns = {@JoinColumn(name = "Pesquisa_id", referencedColumnName = "id")}, inverseJoinColumns = {@JoinColumn(name = "grupo_perguntas_id", referencedColumnName = "id")})
    @ManyToMany
    private Collection<GrupoPerguntas> grupoPerguntasIdCollection;   
    @ManyToMany
    private Collection<Usuario> usuarioidCollection;
    @JoinColumn(name = "responsavel", referencedColumnName = "id")
    @ManyToOne
    private Usuario responsavel;
  
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "pesquisa")
    private Collection<Pesquisagrupoperg> pesquisagrupopergCollection;

    public Pesquisa() {
    }

    public Pesquisa(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public Date getDataInicio() {
        return dataInicio;
    }

    public void setDataInicio(Date dataInicio) {
        this.dataInicio = dataInicio;
    }

    public Date getHoraInicio() {
        return horaInicio;
    }

    public void setHoraInicio(Date horaInicio) {
        this.horaInicio = horaInicio;
    }

    public Date getDataFim() {
        return dataFim;
    }

    public void setDataFim(Date dataFim) {
        this.dataFim = dataFim;
    }

    public Date getHoraFim() {
        return horaFim;
    }

    public void setHoraFim(Date horaFim) {
        this.horaFim = horaFim;
    }

    public String getUrlBanner() {
        return urlBanner;
    }

    public void setUrlBanner(String urlBanner) {
        this.urlBanner = urlBanner;
    }

    public Character getUsuario() {
        return usuario;
    }

    public void setUsuario(Character usuario) {
        this.usuario = usuario;
    }

    public Character getEndereco() {
        return endereco;
    }

    public void setEndereco(Character endereco) {
        this.endereco = endereco;
    }

    public Character getBairro() {
        return bairro;
    }

    public void setBairro(Character bairro) {
        this.bairro = bairro;
    }

    public Character getCidade() {
        return cidade;
    }

    public void setCidade(Character cidade) {
        this.cidade = cidade;
    }

    public Character getCep() {
        return cep;
    }

    public void setCep(Character cep) {
        this.cep = cep;
    }

    public Character getEstado() {
        return estado;
    }

    public void setEstado(Character estado) {
        this.estado = estado;
    }

    public Character getTelefone() {
        return telefone;
    }

    public void setTelefone(Character telefone) {
        this.telefone = telefone;
    }

    public Character getPublicar() {
        return publicar;
    }

    public void setPublicar(Character publicar) {
        this.publicar = publicar;
    }

    public Character getEmail() {
        return email;
    }

    public void setEmail(Character email) {
        this.email = email;
    }

    public Character getSugestao() {
        return sugestao;
    }

    public void setSugestao(Character sugestao) {
        this.sugestao = sugestao;
    }

    public String getUrlLink() {
        return urlLink;
    }

    public void setUrlLink(String urlLink) {
        this.urlLink = urlLink;
    }

    public Character getExigeLogin() {
        return exigeLogin;
    }

    public void setExigeLogin(Character exigeLogin) {
        this.exigeLogin = exigeLogin;
    }

    public Character getIdentificacao() {
        return identificacao;
    }

    public void setIdentificacao(Character identificacao) {
        this.identificacao = identificacao;
    }

    public Character getLoginAnonimo() {
        return loginAnonimo;
    }

    public void setLoginAnonimo(Character loginAnonimo) {
        this.loginAnonimo = loginAnonimo;
    }

    public Collection<GrupoPerguntas> getGrupoPerguntasIdCollection() {
        return grupoPerguntasIdCollection;
    }

    public void setGrupoPerguntasIdCollection(Collection<GrupoPerguntas> grupoPerguntasIdCollection) {
        this.grupoPerguntasIdCollection = grupoPerguntasIdCollection;
    }

    public Collection<Usuario> getUsuarioidCollection() {
        return usuarioidCollection;
    }

    public void setUsuarioidCollection(Collection<Usuario> usuarioidCollection) {
        this.usuarioidCollection = usuarioidCollection;
    }

    public Usuario getResponsavel() {
        return responsavel;
    }

    public void setResponsavel(Usuario responsavel) {
        this.responsavel = responsavel;
    }

   
    public Collection<Pesquisagrupoperg> getPesquisagrupopergCollection() {
        return pesquisagrupopergCollection;
    }

    public void setPesquisagrupopergCollection(Collection<Pesquisagrupoperg> pesquisagrupopergCollection) {
        this.pesquisagrupopergCollection = pesquisagrupopergCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.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 Pesquisa)) {
            return false;
        }
        Pesquisa other = (Pesquisa) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "entidades.Pesquisa[id=" + id + "]";
    }

}

Obrigado,

gui_sv

aparentemente esta certo !!

o banco vc ta criando automaticamente ???
quais tabelas ele criou ??

obrigado

danielti

O Banco eu criei na mão mesmo.
As tabelas estão lá.
Estou desconfiado que pode ser algum cache ou alguma coisa que eu tenha que atualizar do hibernate, pois esta última tabela (Pesquisa_Usuario) estava faltando e eu criei via SQL mesmo.

Obrigado,

gui_sv

Ahh entendi … é pelo fato de vc ter criado na mao … alguma table ou coluna ficou faltando …

eu ja usei em dois projetos …o auto-generate de banco de dados … funciona direitinho !! show …

para isto …

vc ira precisar do arquivo persistence.xml … ele deve ficar em um diretorio META-INF …
pesquise sobre ele para o TopLink auto generate

ele cria o banco direitinho !!

espero ter ajudado !

gui_sv

quando vc cria um relacionamento @ManyToMany o que acontece …

Vamos supor …

Usuario – Grupo

Um usuario esta em muitos grupos.
Um grupo tem mtos usuarios …

Entao ai temos um relacionamento N-N …

No banco como fica …

Tabela: Usuario
tabela: Grupo
Tabele intermediaria: UsuarioPorGrupo ( esta contem somente a PK de usuario e a PK de grupo) apenas para relaciona-los !

No JPA … quando vc anota @ManyToMany é isso que ele faz !!

manjo ?!

Criado 30 de setembro de 2008
Ultima resposta 30 de set. de 2008
Respostas 8
Participantes 2