Executar querie no hibernate utilizando uma querie e uma outro metodo

3 respostas
F

Estou trabalhando em meu primeiro projeto com hibernate, e me deparei com um problema, que para mim era usual quando programado na mão, como obter o resultado de uma querie em outro método. por exemplo:

Aqui eu abro a conexão

final Configuration configuration = new Configuration().configure();
final StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
final SessionFactory factory = configuration.buildSessionFactory(builder.build());
final Session session = factory.openSession();

ok, funcionando conectado a partir desse momento, nada funciona…

eu possuo uma classe LIB, com os métodos e as minhas queries, crio um objeto dela, e chamado o método que preciso (imagino que seja isso)

Método da classe Lib
public List getAgendamentos(Session session) throws SQLException{

List rs=null;
    
    try{
        log.info("Realizando a pesquisa de agendamentos");
        
        String hql = "SELECT * from tb_batch_agendamento where dat_insecao = :data";
        
        Query query = session.createQuery(hql);
        query.setParameter("data", "getdate()");
        rs = (List) query.list();
    }
    catch (Exception e){
        log.error("Erro na pesquisa de agendamento: " + e.getMessage());
    }
    
    return rs;
}</code>

1-Como mapear o List a minha classe @Entity? não é necessário?
2-Esta correto retornar rs = (List) query.list();?
3- o tipo de retorno public List esta correto?

na minha classe, então, chamo esse método:

List vObjAgendamento = (List) vObjLib.getAgendamentos(session);

1-Esta correto esse mapeamento? o java alerta que a lista não esta parametrizada.

e Percorro ele:

obs. BatchAgendamento é o nome da minha @Entity

for (final BatchAgendamento b : vObjbatch) { System.out.println(b); } System.out.println("\n----\n"); e fecho as sessões session.close(); factory.close();

obrigado

3 Respostas

romarcio

Uau… você fez bastante perguntas em um único post. Eu vou pular as perguntas e falar sobre o seu HQL. Quando você usa HQL, você passa a trabalhar com Orientação a Objetos e não mais com Tabelas e Colunas do banco de dados. Sendo assim, você não usa o nome da tabela (tb_batch_agendamento) mas o nome da classe de entidade que mapeou tal tabela. O mesmo serve para a atribuição do critério da consulta (dat_insecao) você não usa o nome da coluna, mas o nome do atributo que você mapeou na classe de entidade.

Se você executar esta consulta HQL vai receber um exceção, está acontecendo isto? Caso você vá utilizar SQL e não HQL, como está fazendo, deveria usar o método createSQLQuery().

romarcio

1 - Depende do tipo de relacionamento que você, se é 1-N ou N-N.
2 - Sim, está certo, só acho que não precisa do cast (List), já que o método list() retorna um List.
3 - Sim, está correto.
Obs: Tanto na 2 como na 3 o ideal é você definir a lista com o tipo de entidade que está trabalhando, por exemplo, se sua entidade é Pessoa, então: List

romarcio

Esqueci nas respostas anteriores, se acostume a utilizar a documentação de referencia do Hibernate, é um material excelente para quem está iniciando com ele.
Hibernate User Guide

Criado 3 de fevereiro de 2016
Ultima resposta 4 de fev. de 2016
Respostas 3
Participantes 2