Gostaria de “traduzir” a query abaixo para o Hibernate, notem que o valor da data(2015-03-01) faria o papel do property name, mas não é, ou seja, quero passar um valor e verificar se ele esta entre dois property name da minha classe “TableName”
SELECT *
FROM table_name
WHERE ‘2015-03-01’ between coluna_data_inicio AND coluna_data_fim;
Melhor ainda, segue essa apostila de Hibernate. Escrever SQL simples assim não é motivo para abrir um tópico, só colocar no google que tem um montão de exemplos.
robinsonbsilva
Boa tarde Rodrigo,
Realmente foi desnecessário todo seu sermão, mas para não ficar um bate boca virtual, depois dá uma olhada no histórico de mensagens postadas/respondidas por mim e você poderá constatar que não sou do tipo que depende que outras pessoas resolvam meus problemas.
Muito obrigado pelo curso de como usar o google!
Rodrigos_Bragas
Você esta certo mesmo, depois que eu respondi eu vi que você é membro desde de 2004 e eu só comecei a aprender alguma coisa de programação(nem era programação, era HTML e CSS) foi no inicio do ano passado, hehehe(fiquei sem graça).
Mas isso foi porque o tópico foi meio vago (só hibernate?), e foi uma duvida tão simples, uma coisa que eu fazia o tempo todo quando usava Banco SQL, que achei rapidamente que era algum folgado querendo que escrevesse códigos só para acrescentar no seu projeto. Foi mal, ai.
Rodrigos_Bragas
Para deixar o tópico mais rico, gostaria de acrescentar que o link do tutorialspoint do Hibernate que te passei, é um site onde tem uma quantidade absurda de muito material gratuito, para programadores, analistas de dados, front-end e muitos outros cursos de linguagens de programação e todo tipo de banco de dados, inclusive BIG DATA. Você pode conferir tudo na página inicial do tutorialspoint.
lucciano01
`acredito que JPQL ficaria assim:
SELECT t FROM Tabela t WHERE t.data BETWEEN :dataIncial AND :dataFinal
`
robinsonbsilva
Senhores(ritas), certamente não consegui expôr meu problema, mas agora está bem melhor:
SELECT * FROM tabela WHERE '2016-01-01' BETWEEN dt_inicio AND dt_fim;
Java:
@EntitypublicclassTabela{@Id@GeneratedValue(strategy=GenerationType.AUTO,generator="id_creator")@Column(name="id")privateLongid;@Column(name="dt_inicio")privateStringdataInicio;@Column(name="dt_fim")privateStringdataFim;//getters and setter}
Query Hibernate:
publicclassTabelaDAO{//CRITERIA --> ERROR: "2016-01-01" could not resolve propertyCriteriacrit=session.createCriteria(Tabela.class);crit.add(Restrictions.between("2016-01-01",dataInicio,dataFim));//ERROR: "2016-01-01" could not resolve propertyListresults=crit.list();//HQL --> Testando ainda, mas acredito que vaiQueryquery=session.createQuery("FROM Tabela WHERE :dt BETWEEN dataInicio AND dataFim");query.setParameter("dt",newDate("2016-01-01"));Listlist=query.list();}
Resumindo, não consegui fazer a consulta usando criteria, tive que usar HQL
robinsonbsilva
Boa noite Luciano, o problema realmente é esse,
SELECT t FROM Tabela t WHERE :variavelDate BETWEEN dtInicio AND dtFim
lucciano01
Robinson acredito que os dois pontos irão no :dtInicio e no :dtFim, e depois do WHERE seria o campo de data da tabela t.variavelDate. Dá uma olhada no padrão da data o banco, por default, coloca no padrão americano e vc pode estar passando uma data formatada em outro padrão.
robinsonbsilva
Luciano, aí que está o pulo do gato, preciso que uma data qualquer esteja entre o valores dessas propriedades.
Postei um exemplo do código acima(dá uma olhada), vou testar só quarta, aí posto o resultado…
robinsonbsilva
Se um dia alguém estiver nessa situação, onde seja necessário verificar se uma “data qualquer” esteja entre os valores de duas colunas data, segue a solução obtida:
publicbooleanexists(ObjetcFiltroobj){StringBuilderhql=newStringBuilder("");hql.append("from Tabela t ");hql.append("where t.tipoId = :tipoId ");if(obj.getDataInicio()!=null){hql.append("and ( :dtInicio between t.dataInicio and t.dataFim ) ");}if(obj.getDataFim()!=null){hql.append("and ( :dtFim between t.dataInicio and t.dataFim ) ");}Queryquery=session.createQuery(hql.toString());query.setParameter("tipoId",obj.getTipo().getId());if(obj.getDataInicio()!=null){query.setParameter("dtInicio",obj.getDataInicio());}if(obj.getDataFim()!=null){query.setParameter("dtFim",obj.getDataFim());}List<?>list=query.list();return(list.size()>0?true:false);}