a aplicaçao demora cerca de 15 segundos pra me retornar esse resultado.
É um tempo bem grande ao meu ver, mas, um problema de cada vez.
Para entender o meu problema, devemos entender o que eu quero.
Tenho uma tabela Demanda, que pode possuir várias Ocorrencias, cada uma.
Sendo assim, eu quero que essa consulta, me traga todas as ultimas Ocorrencias de cada Demanda do banco.
Minha query ficou assim:
Session session = getSession();
Query query = session.createQuery("from Ocorrencia o where o.data in(select max(oc.data) from Ocorrencia oc group by oc.demanda.idDemanda)");
List<Ocorrencia> listaOcorrencias = new ArrayList<Ocorrencia>();
listaOcorrencias = query.list();
session.close();
System.out.println(listaOcorrencias.size());
Quando faço isso, ele nao me retorna resposta alguma, fica carregando eternamente.
Esperei cerca de 5 minutos pela resposta, e ela nao veio.
Fico me perguntando se a consulta travou por algum motivo, ou se ela ainda estava sendo feita…eternamente.
Será que alguem tem alguma dica de como melhorar e concertar isso ai?
Tenho essa tabela de Ocorrencias, cada ocorrencia pertence ä uma demanda. À medida que uma demanda vai ganhando avanços, novas ocorrencias vão sendo
cadastradas…juntando assim varias ocorrencias filhas de uma demanda.
Quando o usuario loga no sistema, ele tem uma caixa de entrada de demandas que ele tem que resolver. Nessa caixa de entrada, eu quero que seja mostrado
os dados da ultima ocorrencia, de cada demanda que esteja sob responsabilidade desse usuario.
Ou seja, quero retornar a ultima ocorrencia, de cada demanda do sistema. Isso eu verifico pela data, pego a maior data de cada ocorrencia, e armazeno essa ocorrencia, que representa uma demanda.
E por ai vai…até montar a caixa de entrada do usuario.
Então, eu so utilizo uma data nessa consulta, que é a data do objeto Ocorrencia.
Essa data é a data de cada acontecimento que se segue no decorrer daquela demanda.
Cada acontecimento é uma Ocorrencia.
As datas que voce identificou, são do objeto Demanda, essas datas não sao utilizadas nessa consulta,
somente em consulta para encontrar Demandas que foram iniciadas em um periodo de tempo.
Tá complicado essa consulta hein.rsrs
Não sei se isso que coloquei vai funcionar.
Query query = session.createQuery(“select d from demanda d where d.ocorrencia = (select oc,max(oc.data) as maior from Ocorrencia oc join demanda d where oc.data = maior)”);
Tentei trazer uma lista de demandas, em que cada demanda teria a maior ocorrência
Qualquer coisa coloca a dúvida lá no forum de sql e depois traduz para o hibernate.
Um chefe enviou uma demanda pro seu funcionario, nessa demanda ele disse que queria que fosse contratada uma fornecedora de café pra repartição.
Com isso, foi gerada uma Demanda.
Quando esse funcionario logar no sistema, ele vai notar na caixa de entrada dele essa demanda. Então ele vai enviar essa demanda pro setor de contatos,
pois ele já pesquisou qual a fornecedora mais em conta, e quer que o pessoal de contato, entre em contato com a empresa pra fechar negocio. Com isso
foi gerada outra Ocorrencia na mesma demanda.
Quando o usuario do setor de contatos logar, ele vai notar na caixa dele essa nova Ocorrencia. Ele vai entrar em contato com a fornecedora, e vai devolver
essa demanda para o funcionario inicial, criando assim outra Ocorrencia.
Finalmente, o usuario vai ver que o contrato foi fechado, e vai finalizar a demanda, definindo seu status como “FINALIZADO”.
Moral da historia: quando o usuario do setor de contatos entrou no sistema, ele so queria ver na caixa de entrada dele, os dados referentes ä ultima ocorrencia
daquela demanda que foi encaminhada para ele. Daí vem a necessidade do max(o.data).