Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Não aparece o Sysout no console :/

Quando faço o INNER JOIN no terminal, aparecem as tabelas no console:

MariaDB [alura_jpa]> SELECT * FROM Movimentacao INNER JOIN Categoria ON Categoria.id = Movimentacao.id;
+----+---------------------+--------------+------------------+--------+----------+----+-----------+
| Id | data                | descricao    | tipoMovimentacao | valor  | conta_id | id | nome      |
+----+---------------------+--------------+------------------+--------+----------+----+-----------+
|  3 | 2021-02-21 05:52:27 | Viagem à RJ  | SAIDA            | 400.00 |        1 |  3 | Viagem    |
|  4 | 2021-02-21 06:41:55 | Churrascaria | ENTRADA          | 200.00 |        2 |  4 | Negócios  |
|  5 | 2021-02-21 07:05:29 | Viagem à SP  | SAIDA            | 300.00 |        1 |  5 | Viagem    |
|  6 | 2021-02-21 07:05:29 | Viagem à RJ  | SAIDA            | 400.00 |        1 |  6 | Negócios  |
+----+---------------------+--------------+------------------+--------+----------+----+-----------+
4 rows in set (0.001 sec)

Já no eclipse, não apresenta erro, porém termina a execução sem mostrar o Sysout.

public class TesteJPQLMovimentacaoDeUmaCategoria {

    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("contas");
        EntityManager em = emf.createEntityManager();

        String jpql = "SELECT m FROM Movimentacao m JOIN m.categorias c WHERE c = :pCategoria";

        Categoria categoria = new Categoria();
        categoria.setId(1L);

        TypedQuery<Movimentacao> query = em.createQuery(jpql, Movimentacao.class);
        query.setParameter("pCategoria", categoria);

        List<Movimentacao> movimentacoes = query.getResultList();

        movimentacoes.stream().forEach(m -> {
            System.out.println("Categorias: " + m.getCategorias());
            System.out.println("Descrição" + m.getDescricao());
            System.out.println("Tipo: " + m.getTipoMovimentacao());

        });

//        movimentacoes.stream().forEach(System.out::println);

    }

}
            <property name="hibernate.show_sql" value="false" />
            <property name="hibernate.format_sql" value="true" />
2 respostas
solução!

Seu select do terminal mostra todos registros, e no programa está filtrando os registros com id igual a 1, que aparentemente não existem.

Tente id de 3 a 6, e além disso, altere show_sql para true, para verificar qual sql está sendo enviado para o banco de dados e corrigir o jpql se necessário.

Isso mesmo, amigo!! Agora entendi onde estava o erro. Obrigada!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software