Coleção Hibernate Child Limited ao usar associação à esquerda nos critérios
Ao usar critérios de hibernação, apenas alterar o tipo de associação afeta os resultados das coleções filho da classe de domínio raiz.
Por exemplo, ter a classe Parent tem um relacionamento um-para-muitos com a classe Child com os seguintes dados:
Parent | id | Name | | 1 | Parent 1 | Child | id | parent_id | Name | | 1 | 1 | Child1 | | 2 | 1 | Child2 |
O uso dos seguintes critérios de hibernação retorna a 1 linha pai e o acesso à coleção filha resulta nas duas linhas retornadas:
session.createCriteria(Parent.class)
.createCriteria('child', CriteriaSpecification.INNER_JOIN)
.add( Restrictions.eq( 'name', 'Child1' ) )
.list()
No entanto, ao alterar o código acima com uma junção esquerda, a 1 linha pai é retornada, mas somente a linha filho correspondente é retornada ao acessar a coleção filho.
session.createCriteria(Parent.class)
.createCriteria('child', CriteriaSpecification.LEFT_JOIN)
.add( Restrictions.eq( 'name', 'Child1' ) )
.list()
Por que esse efeito colateral ocorre? Eu encontrei algumas discussões sobre como usar ou evitar esse efeito colateral, dependendo do resultado pretendido, mas nada sobre o motivo de ele estar lá em primeiro lugar e se foi intencional. A pergunta direta mais próxima é um antigo defeito obsoleto (http://opensource.atlassian.com/projects/hibernate/browse/HHH-3872)
EDIT 3/24: Dados fixos *