[RESOLVIDO] - [PROBLEMA] Não executa query no HIBERNATE

9 respostas
X

Salve galera,
Minha aplicação funcionando corretamente, até que tive que fazer um SQL.
Pergunta que me faço sempre, QUAL O PROBLEMA?

A história foi: Criei minha classe no BEAN, criei minha DAO e fiz meus critérios de seleção e mandei pesquisar.
O SQL gerado pelo HIBERNATE executa no PL/SQL (ORACLE) mas não na aplicação.

Abaixo estão algumas das minhas classes, não consigo executar nenhuma query.

Conexão hibernate
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.intersys.Dao;

import com.intersys.bean.Aplicacoes;
import com.intersys.bean.BancoDadosClientes;
import com.intersys.bean.Clientes;
import com.intersys.bean.Equipes;
import com.intersys.bean.Hdoc035;
import com.intersys.bean.Hdoc870;
import com.intersys.bean.Hdoc870PK;
import com.intersys.bean.Log;
import com.intersys.bean.ProgramaTipo;
import com.intersys.bean.Programas;
import com.intersys.bean.ProgramasPK;
import com.intersys.bean.Responsaveis;
import com.intersys.bean.Solicitacoes;
import com.intersys.bean.SolicitacoesPK;
import com.intersys.bean.SolicitacoesStatusDoc;
import com.intersys.bean.SolicitacoesStatusVal;
import com.intersys.bean.Sqls;
import com.intersys.bean.TabelaSql;
import com.intersys.bean.TextoSql;
import com.intersys.bean.TextoSqlPK;
import com.intersys.bean.TipoServicoTerceiro;
import java.io.File;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

/**
 * The class control de new session. Take care all new istance of this
 * class build a new factory session.
 * @author fabiok
 */
public class HibernateUtil {

    private static SessionFactory factory;
    private static AnnotationConfiguration cfg;
    private static int DataBaseDesenv = 1;

    static {
        cfg = new AnnotationConfiguration();
        cfg.addAnnotatedClass(Aplicacoes.class);
        cfg.addAnnotatedClass(BancoDadosClientes.class);
        cfg.addAnnotatedClass(Clientes.class);
        cfg.addAnnotatedClass(Equipes.class);
        cfg.addAnnotatedClass(Hdoc035.class);
        cfg.addAnnotatedClass(Log.class);
        cfg.addAnnotatedClass(ProgramaTipo.class);
        cfg.addAnnotatedClass(Programas.class);
        cfg.addAnnotatedClass(ProgramasPK.class);
        cfg.addAnnotatedClass(Responsaveis.class);
        cfg.addAnnotatedClass(Solicitacoes.class);
        cfg.addAnnotatedClass(SolicitacoesPK.class);
        cfg.addAnnotatedClass(SolicitacoesStatusDoc.class);
        cfg.addAnnotatedClass(SolicitacoesStatusVal.class);
        cfg.addAnnotatedClass(Sqls.class);
        cfg.addAnnotatedClass(TabelaSql.class);
        cfg.addAnnotatedClass(TextoSql.class);
        cfg.addAnnotatedClass(TextoSqlPK.class);
        cfg.addAnnotatedClass(TipoServicoTerceiro.class);
        cfg.configure();
        factory = cfg.buildSessionFactory();
    }

    public HibernateUtil() {
    }
    /**
     * Create another connection. The file .xml need already exists
     * from sucess method.
     * @param dataBase
     *      1 - Base Desenv
     */
    public HibernateUtil(int dataBase){
        if (dataBase == DataBaseDesenv){
            cfg.configure(new File("src\hibernateDesenv.cfg.xml"));
            cfg.addAnnotatedClass(Hdoc870.class);
            cfg.addAnnotatedClass(Hdoc870PK.class);
            factory = cfg.buildSessionFactory();
        }
    }

    public Session getSession() {
        return factory.openSession();
    }
}

Os construtores fazem diferentes conexões uma é no sistema interno e outra sistema do cliente.

minha classe do BEAN

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

package com.intersys.bean;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 *
 * @author fabiok
 */
@Entity
@Table(name = "APLICACOES")
@NamedQueries({
    @NamedQuery(name = "Aplicacoes.findAll", query = "SELECT a FROM Aplicacoes a"),
    @NamedQuery(name = "Aplicacoes.findByCodAplic", query = "SELECT a FROM Aplicacoes a WHERE a.codAplic = :codAplic"),
    @NamedQuery(name = "Aplicacoes.findByDescrAplic", query = "SELECT a FROM Aplicacoes a WHERE a.descrAplic = :descrAplic"),
    @NamedQuery(name = "Aplicacoes.findByCaminho", query = "SELECT a FROM Aplicacoes a WHERE a.caminho = :caminho"),
    @NamedQuery(name = "Aplicacoes.findByPastaTemp", query = "SELECT a FROM Aplicacoes a WHERE a.pastaTemp = :pastaTemp"),
    @NamedQuery(name = "Aplicacoes.findByVariavelVersao", query = "SELECT a FROM Aplicacoes a WHERE a.variavelVersao = :variavelVersao"),
    @NamedQuery(name = "Aplicacoes.findByNomeProjeto", query = "SELECT a FROM Aplicacoes a WHERE a.nomeProjeto = :nomeProjeto"),
    @NamedQuery(name = "Aplicacoes.findByCaminhoRelease", query = "SELECT a FROM Aplicacoes a WHERE a.caminhoRelease = :caminhoRelease"),
    @NamedQuery(name = "Aplicacoes.findByCaminhoInternet", query = "SELECT a FROM Aplicacoes a WHERE a.caminhoInternet = :caminhoInternet"),
    @NamedQuery(name = "Aplicacoes.findByMaquina", query = "SELECT a FROM Aplicacoes a WHERE a.maquina = :maquina"),
    @NamedQuery(name = "Aplicacoes.findByCaminhoApp", query = "SELECT a FROM Aplicacoes a WHERE a.caminhoApp = :caminhoApp")})
public class Aplicacoes implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "COD_APLIC")
    private int codAplic;
    @Column(name = "DESCR_APLIC")
    private String descrAplic;
    @Column(name = "CAMINHO")
    private String caminho;
    @Column(name = "PASTA_TEMP")
    private String pastaTemp;
    @Column(name = "VARIAVEL_VERSAO")
    private String variavelVersao;
    @Column(name = "NOME_PROJETO")
    private String nomeProjeto;
    @Column(name = "CAMINHO_RELEASE")
    private String caminhoRelease;
    @Column(name = "CAMINHO_INTERNET")
    private String caminhoInternet;
    @Column(name = "MAQUINA")
    private String maquina;
    @Column(name = "CAMINHO_APP")
    private String caminhoApp;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "aplicacoes", fetch = FetchType.LAZY)
    private Collection<Programas> programasCollection;

    public Aplicacoes() {
    }

    public Aplicacoes(int codAplic) {
        this.codAplic = codAplic;
    }

    public int getCodAplic() {
        return codAplic;
    }

    public void setCodAplic(Short codAplic) {
        this.codAplic = codAplic;
    }

    public String getDescrAplic() {
        return descrAplic;
    }

    public void setDescrAplic(String descrAplic) {
        this.descrAplic = descrAplic;
    }

    public String getCaminho() {
        return caminho;
    }

    public void setCaminho(String caminho) {
        this.caminho = caminho;
    }

    public String getPastaTemp() {
        return pastaTemp;
    }

    public void setPastaTemp(String pastaTemp) {
        this.pastaTemp = pastaTemp;
    }

    public String getVariavelVersao() {
        return variavelVersao;
    }

    public void setVariavelVersao(String variavelVersao) {
        this.variavelVersao = variavelVersao;
    }

    public String getNomeProjeto() {
        return nomeProjeto;
    }

    public void setNomeProjeto(String nomeProjeto) {
        this.nomeProjeto = nomeProjeto;
    }

    public String getCaminhoRelease() {
        return caminhoRelease;
    }

    public void setCaminhoRelease(String caminhoRelease) {
        this.caminhoRelease = caminhoRelease;
    }

    public String getCaminhoInternet() {
        return caminhoInternet;
    }

    public void setCaminhoInternet(String caminhoInternet) {
        this.caminhoInternet = caminhoInternet;
    }

    public String getMaquina() {
        return maquina;
    }

    public void setMaquina(String maquina) {
        this.maquina = maquina;
    }

    public String getCaminhoApp() {
        return caminhoApp;
    }

    public void setCaminhoApp(String caminhoApp) {
        this.caminhoApp = caminhoApp;
    }

    public Collection<Programas> getProgramasCollection() {
        return programasCollection;
    }

    public void setProgramasCollection(Collection<Programas> programasCollection) {
        this.programasCollection = programasCollection;
    }

    @Override
    public String toString() {
        return "com.intersys.bean.Aplicacoes[codAplic=" + codAplic + "]";
    }

}

Classe normal gerada pelo NETBENS

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

package com.intersys.Dao;

import com.intersys.bean.Aplicacoes;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Expression;

/**
 *
 * @author fabiok
 */
public class AplicacoesDao extends HibernateUtil{
    private Session session;

    public AplicacoesDao() {
        this.session = getSession();
    }

    public List<Aplicacoes> find(Criterion criterion){
        Criteria crit = this.session.createCriteria(Aplicacoes.class);
        crit.add(criterion);
        return crit.list();
    }

    public Aplicacoes findByCodeApplication(int codeApplication){
        Criteria crit = this.session.createCriteria(Aplicacoes.class);
        Criterion criterionCodeApplication = Expression.eq("codAplic", codeApplication);
        crit.add(criterionCodeApplication);
        List<Aplicacoes> listAplicacoes = crit.list();
        for (Aplicacoes aplicacoes : listAplicacoes) {
            return aplicacoes;
        }
        return null;
    }
}

minha classe principal é:

public void motor() {
        if (this.processType == 0) {
            try {
                DateManager dateUtil = new DateManager();
                SolicitacoesDao solicitacoesDao = new SolicitacoesDao();
                ProgramasDao programasDao = new ProgramasDao();
                SqlsDao sqlsDao = new SqlsDao();
                Hdoc870Dao hdoc870Dao = new Hdoc870Dao();
                ReleaseManager fileManager = new ReleaseManager();
                List<ReleaseFile> listRelease = new ArrayList<ReleaseFile>();
                ReleaseFile releaseFile;
                Criterion criterionSolicitacoes = Expression.between("dataAtendimento", dateUtil.getDateFinal(dateUtil.getDateStart()), dateUtil.getDateStart());
                List<Solicitacoes> listSolicitacoes = solicitacoesDao.find(criterionSolicitacoes);
                System.out.println("Total de Solicitações encontradas: " + listSolicitacoes.size());
                for (Solicitacoes solicitacoes : listSolicitacoes) {
                    Criterion criterionProgramas = Expression.and(Expression.eq("programasPK.codSolicitacao", solicitacoes.getSolicitacoesPK().getCodSolicitacao()), Expression.eq("programasPK.sequenciaSol", solicitacoes.getSolicitacoesPK().getSequencia()));
                    List<Programas> listProgramasSolicitacao = programasDao.find(criterionProgramas);
                    for (Programas programas : listProgramasSolicitacao) {
                        releaseFile = new ReleaseFile();
                        releaseFile.setApplicationType(programas.getProgramasPK().getAplicacao());
                        releaseFile.setProgramType(programas.getHdoc035().getTipoPrograma().getId());
                        releaseFile.setProgramName(programas.getProgramasPK().getPrograma());
                        releaseFile.setSql(0);
                        releaseFile.setPassword("SENHA");
                        if (validade(listRelease, releaseFile)) {
                            listRelease.add(releaseFile);
                        }
                    }
                    Criterion criterionSqls = Expression.and(Expression.eq("codSolicitacao", solicitacoes.getSolicitacoesPK().getCodSolicitacao()), Expression.eq("sequenciaSol", solicitacoes.getSolicitacoesPK().getSequencia()));
                    List<Sqls> listSqls = sqlsDao.find(criterionSqls);
                    for (Sqls sql : listSqls) {
                        releaseFile = new ReleaseFile();
                        releaseFile.setApplicationType(5);
                        releaseFile.setProgramType(9);
                        releaseFile.setProgramName("SQL");
                        releaseFile.setSql(sql.getCodigoSql());
                        releaseFile.setPassword("SENHA");
                        if (validade(listRelease, releaseFile)) {
                            listRelease.add(releaseFile);
                        }
                    }
                }
                /**********************************************************************************************************************
                   DAQUI PRA CIMA TA 100% MAS AI QUANDO EU MANDO EXECUTA CREATE RELEASE ELE TA UNS CREP E DA A MENSAGEM DE
                   could not execute query.
                ***********************************************************************************************************************/
                try {
                    fileManager.createFileRls(listRelease);
                    fileManager.createRelease(listRelease);
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(Generator.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(Generator.class.getName()).log(Level.SEVERE, null, ex);
                }
                List<Hdoc870> listTagRelease = new ArrayList<Hdoc870>();
                List<Hdoc870> listTagReleaseInsert = new ArrayList<Hdoc870>();
                Criterion criterion = Expression.eq("flagAtualizado", 0);
                List<Hdoc870> listHdoc870 = hdoc870Dao.find(criterion);
                for (Hdoc870 hdoc870 : listHdoc870) {
                    Criterion criterionTag = Expression.eq("hdoc870PK.tag",hdoc870.getHdoc870PK().getTag());
                    Criterion criterionLocale = Expression.eq("hdoc870PK.locale",hdoc870.getHdoc870PK().getLocale());
                    Criterion criterionData = Expression.isNull("dataAlteracao");
                    List<Criterion> listCriterions = new ArrayList<Criterion>();
                    listCriterions.add(criterionTag);
                    listCriterions.add(criterionLocale);
                    listCriterions.add(criterionData);
                    List<Hdoc870> listTagReleaseExiste = hdoc870Dao.findByList(listCriterions);
                    if (!listTagReleaseExiste.isEmpty()){
                        for (Hdoc870 hdoc870Insert : listTagReleaseExiste) {
                            listTagReleaseInsert.add(hdoc870Insert);
                        }
                    }else{
                        listTagRelease.add(hdoc870);
                    }
                }
                try {
                    fileManager.createFileTagUpdate(listTagRelease, listTagReleaseInsert);
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(Generator.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(Generator.class.getName()).log(Level.SEVERE, null, ex);
                }
                programasDao.closeSession();
                sqlsDao.closeSession();
                hdoc870Dao.closeSession();
                solicitacoesDao.closeSession();
                System.out.println("Processo finalizado com sucesso. Release X gerada.");
            } catch (ParseException ex) {
                Logger.getLogger(Generator.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            System.out.println("Erro ao inicio processo de geração de Release. Release emergencia ainda não disponível.");
        }
    }

o main só chama essa classe MOTOR por isso não postei.

o CREP ta na classe abaixo (so tem o metodo rs)
public void createRelease(List<ReleaseFile> listReleaseFile) throws FileNotFoundException, IOException{
        AplicacoesDao aplicacoesDao = new AplicacoesDao();

        for (ReleaseFile releaseFile : listReleaseFile) {
[b]--->>>>>>>> AQUI Ó            Aplicacoes aplicacoes = aplicacoesDao.findByCodeApplication(releaseFile.getApplicationType());[/b]
            String hostDirectory = aplicacoes.getCaminho();
            String sourceDirectory = aplicacoes.getPastaTemp();
            FileManager fileManager = new FileManager();
            //SQL - Solicitação
            if (releaseFile.getProgramType() == 9){
                TextoSqlDao textoSqlDao = new TextoSqlDao();
                this.sb = new StringBuffer();
                File file = new File("Y:\alter_oracle_" + String.valueOf(releaseFile.getSql()) + ".sql");
                Criterion criterionTextoSql = Expression.eq("textoSqlPK.numeroSql", releaseFile.getSql());
//                List<TextoSql> listTextoSql = textoSqlDao.find(criterionTextoSql);
//                for (TextoSql textoSql : listTextoSql) {
//                    this.sb.append(textoSql.getTextoSql()+"\n");
//                }
//                createFileSql(file, this.sb.toString());
            }else   //Relatório RP
                if (releaseFile.getProgramType() == 2){
                    fileManager.execute(new File(releaseFile.getProgramName()), releaseFile.getProgramType());
                }
        }
    }
ele retorna a exception
WARNING: SQL Error: 942, SQLState: 42000
Apr 5, 2010 10:47:37 AM org.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: ORA-00942: table or view does not exist

Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not execute query
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
        at org.hibernate.loader.Loader.doList(Loader.java:2223)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
        at org.hibernate.loader.Loader.list(Loader.java:2099)
        at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
        at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
        at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
        at com.intersys.Dao.AplicacoesDao.findByCodeApplication(AplicacoesDao.java:36)
        at com.intersys.manager.ReleaseManager.createRelease(ReleaseManager.java:61)
        at com.intersys.Control.Generator.motor(Generator.java:86)
        at com.intersys.packagegenerator.Main.main(Main.java:21)
Caused by: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist

        at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:91)
        at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:112)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:173)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:455)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:413)
        at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:1030)
        at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:194)
        at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:785)
        at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:860)
        at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1186)
        at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3381)
        at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3425)
        at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1490)
        at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
        at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
        at org.hibernate.loader.Loader.doQuery(Loader.java:674)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
        at org.hibernate.loader.Loader.doList(Loader.java:2220)
        ... 9 more
Java Result: 1

desculpe a tripa, mas é que realmente não sei pra onde correr, já tentei com várias pessoas certificadas mas não obtive sucesso.

se puder, por favor me ajudem.

9 Respostas

thiago.correa
X

Pois thiago, também vi isso, só que a tabela existe e meu usuario tem acesso a ela.
Se eu copiar o sql do hibernate o bixim executa.

thiago.correa

E o usuário que está sendo usado para criar a conexão tem acesso?!

X

Tem, ele tem acesso total ao banco de dados.
só não tem o nome de sys, porque o resto é igual.
rs

thiago.correa

Bom, se loga no banco com o usuário e senha e tenta dar um select nessa tabela banco!

X

feito, esta ok, executa pefeitamente e com o sql gerado pelo HIBERNATE.
:confused:

Vini_Fernandes

Cara, veja o seguinte trace: "SEVERE: ORA-00942: table or view does not exist "

Isso indica que a tabela que esta mapeando nao existe, portanto, verifique se a definicao de sua anotacao @Entity esta correta e se a tabela Aplicacoes realmente existe na base, para isso exetute:

select * from aplicacoes;

T+

X

Vini Fernandes:
Cara, veja o seguinte trace: "SEVERE: ORA-00942: table or view does not exist "

Isso indica que a tabela que esta mapeando nao existe, portanto, verifique se a definicao de sua anotacao @Entity esta correta e se a tabela Aplicacoes realmente existe na base, para isso exetute:

select * from aplicacoes;

T+

Verifiquei isso, existe e o sql executa, o que eu pude perceber é que como no meu HibernateUtil eu tenho 2 configure, acho que ele ta se perdendo, porque quando eu chamo a classe HDOC870DAO() eu inicio outro configure para outra base/usuario/senha

acho que pode ser isso, não pode?

X

Desculpa galera, mas era óbvio que eu tava fazendo uma pitocada…
então, consegui acertar aqui…

Só para fechar o tópico, no minha classe HibernateUtil eu tenho 2 construtores e um deles esta sem o caminho do arquivo XML, eu coloquei o caminho do segundo XML.
e também no CONSTRUTOR que tem o parametro não era inicializado o ANNOTATIONCONFIGURATION() do cfg.

fazendo estas duas alterações a aplicação voltou a funcionar.

OBRIGADO PELA ATENÇÃO.

Criado 5 de abril de 2010
Ultima resposta 5 de abr. de 2010
Respostas 9
Participantes 3