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());
}
}
}
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.
