Boa tarde pessoal, eu tenho a seguinte situação:
uma classe Pch (pai) e nela um atributo tipo Set ligando a Leitura (filhos).
Bom vejamos este caso: eu tenho dois pais Pch 1, pch 2 e cada pai tem 3 filhos: (aqui no banco de dados)
Pch 1 -> leitura 1,2,3
Pch 2 -> leitura 4,5,6
eu preciso trazer em uma consulta todas as pchs e as leituras de um intervalo de datas então uso:
Query query = session.createQuery("FROM Pch p JOIN FETCH p.leituras l WHERE l.dataLeitura BETWEEN :datainicio AND :datafim ORDER BY p.nome ASC");
query.setTimestamp("datainicio", datainicio);
query.setTimestamp("datafim", datafim);
List result = query.list();
o correto era ele me trazer os 2 pais com as coleções inicializadas:
Pch 1 -> leitura 1,2,3
Pch 2 -> leitura 4,5,6
mas ele me devolve assim:
Pch 1 -> leitura 1,2,3
Pch 1 -> leitura 1,2,3
Pch 1 -> leitura 1,2,3
Pch 2 -> leitura 4,5,6
Pch 2 -> leitura 4,5,6
Pch 2 -> leitura 4,5,6
ou seja a qualtidade de pais relativa a qualtidade de filhos.
Para me trazer corretametne preciso usar DISTINCT:
Query query = session.createQuery("SELECT DISTINCT(p) FROM Pch p JOIN FETCH p.leituras l WHERE l.dataLeitura BETWEEN :datainicio AND :datafim ORDER BY p.nome ASC");
query.setTimestamp("datainicio", datainicio);
query.setTimestamp("datafim", datafim);
List result = query.list();
minha dúvida é: ele não deveria trazer as coleções inicializadas sem ter que usar DISTINCT ?
abraços