2
respostas

Dúvida em relação ao join

Boa tarde professor.

Tem uma dúvida em relação ao join.

Na linha:

String sql = "select m from Movimentacao m join m.categorias c where c = :pCategoria";

é criada uma condição que compara m.categorias com o parâmetro pCategoria. O valor do parâmetro pCategoria é o objeto categoria de id = 2, tendo em vista os seguintes trechos do de código:

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

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

A minha dúvida é quanto ao resultado da busca. Por que o retorno é Categorias: [Viagem - 1, Negócios - 2], se na busca é usada uma condição where c = :pCategoria e a categoria buscada é apenas uma, categoria.setId(2L), por que a busca retorna tanto a categoria de id 2 com a de id 1 se só e buscada a categoria de id 2.

2 respostas

Eu estou com a mesma dúvida, não deveria trazer somente as movimentação cuja categoria seja o Id 2?

Bom dia Paulo, pelo que entendi, a busca é feita na tabela Movimentacao, e essa tabela possui uma lista de Categorias ou seja, uma outra tabela que referencia as suas Categorias, então embora você especifique o id 2, isso não é validado dentro da lista que a Movimentacao possui.