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.
R
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!
R
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.
R
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.
L
lucciano01
`acredito que JPQL ficaria assim:
SELECT t FROM Tabela t WHERE t.data BETWEEN :dataIncial AND :dataFinal
`
R
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
R
robinsonbsilva
Boa noite Luciano, o problema realmente é esse,
SELECT t FROM Tabela t WHERE :variavelDate BETWEEN dtInicio AND dtFim
L
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.
R
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…
R
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);}