[RESOLVIDO] SQLnativo em java

Amigos, meu problema é o seguinte. Estou executando uma query com sqlnativo e não estou conseguindo. (Minha query roda normal no banco)

public List<NotaEmpresas> buscarPorData(String dataInicioFormatada, String dataFimFormatada) {
		List<NotaEmpresas> listNota = null;
		try {
			Query sqlQuery = em.createNativeQuery("select "
					+ "infnfe.cnpj_emitente emit_cnpj, "
					+ "infnfe.id_infnfe as chave_nfce, "
					+ "ide.nnf as numero_nfce,"
					+ "ide.serie as serie_nfce,"
					+ "ide.tpNF as tpNF_nfce,"
					+ "ide.tpEmis  as tpEmis_nfce,"
					+ "ide.dhemi as dhEmi_nfce,"
					+ "icmstot.VNF AS total_vNF,"
					+ "dest.CPF +  dest.CNPJ +  dest.ID_ESTRANGEIRO as dest"
					+ "from SEFAZ_NFC.TB_INFNFE infnfe"
					+ "left join SEFAZ_NFC.TB_IDE ide on ide.ID_IDE = infnfe.ID_IDE"
					+ "left join SEFAZ_NFC.TB_TOTAL total on infnfe.ID_TOTAL = total.ID_TOTAL"
					+ "left join SEFAZ_NFC.TB_ICMSTOT icmstot on icmstot.ID_ICMSTOT = total.ID_ICMSTOT"
					+ "left join SEFAZ_NFC.TB_dest dest on infnfe.id_dest = dest.id_dest"
					+ "where ide.dhemi between TO_DATE('2018/02/01', 'yyyy/mm/dd') and TO_DATE('2018/02/05', 'yyyy/mm/dd');", NotaEmpresas.class);
			if (sqlQuery==null) {
				System.out.println("SQL NULOOOOOOOOOOOOOOOOOOOOOOOOO");
			}
//			sqlQuery.setParameter("dataInicial", dataInicioFormatada);
//			sqlQuery.setParameter("dataFinal", dataFimFormatada);
			
			listNota = (List<NotaEmpresas>) sqlQuery.getResultList();
		} catch (NoResultException ex) {
			System.out.println("Lista nota não encontrada!");
		}
		return listNota;

	}

Erro:

ERROR [io.undertow.request] (default task-1) UT005023: Exception handling request to /auditor-nfce/pages/auditor/consulta.jsf: javax.servlet.ServletException: javax.el.ELException: java.lang.NullPointerException
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:228) [myfaces-bundle-2.2.0.jar:2.2.0]
	at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:130) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:100) [primefaces-6.0.jar:6.0]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]

Final do erro......

Caused by: java.lang.NullPointerException
	at br.com.nfce.services.NfceService.buscarPorData(NfceService.java:27) [auditor-nfce-persistence-0.0.1-SNAPSHOT.jar:]
	at br.com.nfce.controller.externo.ConsultaController.buscarPorData(ConsultaController.java:77) [classes:]
	at br.com.nfce.controller.externo.ConsultaController.consulta(ConsultaController.java:66) [classes:]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_172]
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [rt.jar:1.8.0_172]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [rt.jar:1.8.0_172]
	at java.lang.reflect.Method.invoke(Unknown Source) [rt.jar:1.8.0_172]
	at com.sun.el.parser.AstValue.invoke(AstValue.java:292) [javax.el-3.0.1-b05.jar:]
	... 77 more

O que tem na linha 27?

Onde chamo esse método.

Linha 27

	List<NotaEmpresas> notas = new NfceService().buscarPorData(dataInicioFormatada, dataFimFormatada);

dataInicioFormatada ou dataFimFormatada ta nulo?

Não, debuguei e vi os valores preenchidos, inclusive formatei elas dps de receber.

Estava pensando, minha classe que recebe a query (NotaEmpresas) precisa está anotada com Entity?

Sim, precisa

@Mike hm… mas isso não faria meu hibernate criar ele como tabela no meu banco? Como faria pra ela representar apenas a minha query e não uma table de fato?

É… ele iria criar a tabela.

Quando você da select em vários campos, a jpa te retorna uma lista de Strings e não o objeto com os atributos.

Tem uma maneira que traz o objeto juntamente com os atributos do select, se não me engano chama JPA EntityGraph, mas até então, nunca utilizei

Quando você da select em vários campos, a jpa te retorna uma lista de Strings e não o objeto com os atributos.

Hmmm então eu poderia rodar um for e ir setando na mão os atributos será?
Meus atributos são todos String

Pode sim

Vou pesquisar e testar, obrigado pelo norte. Se conseguir volto e posto aqui.

:+1:

Tenta fazer a maneira mais básica, que é iterar sobre a lista de String e ir manualmente setando na classe. Se der certo ou não tiver indo de jeito nenhum, tenta o EntityGraph

1 curtida

Galera, não conseguir usar utilizando o Object[]. Então resolvi anotando a classe NotaEmpresa com Entity. Não testei o EntityGraph.