Hibernate (between inverso) (RESOLVIDO)

10 respostas
robinsonbsilva

Boa tarde!!

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;

Desde já agradeço.

10 Respostas

Rodrigos_Bragas

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:

CREATE TABLE tabela(
    id INTEGER,
    dt_inicio DATE,
    dt_fim DATE
)

Query SQL:

SELECT * FROM tabela WHERE '2016-01-01' BETWEEN dt_inicio AND dt_fim;

Java:

@Entity
public class Tabela{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "id_creator")
    @Column(name = "id")
    private Long id;

    @Column(name = "dt_inicio")
    private String dataInicio;

    @Column(name = "dt_fim")
    private String dataFim;

    //getters and setter
}

Query Hibernate:

public class TabelaDAO{
    //CRITERIA --> ERROR: "2016-01-01" could not resolve property
    Criteria crit = session.createCriteria(Tabela.class);
    crit.add(Restrictions.between("2016-01-01", dataInicio, dataFim)); //ERROR: "2016-01-01" could not resolve property
    List results = crit.list();
    
    //HQL --> Testando ainda, mas acredito que vai
    Query query = session.createQuery("FROM Tabela WHERE :dt BETWEEN dataInicio AND dataFim");
    query.setParameter("dt", new Date("2016-01-01"));
    List list = 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:

public boolean exists(ObjetcFiltro obj) {

        StringBuilder hql = new StringBuilder("");
        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 ) ");
        }

        Query query = 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);

    }
Criado 5 de fevereiro de 2016
Ultima resposta 10 de fev. de 2016
Respostas 10
Participantes 3