Problema relacionamento muito para muitos

Estou mapeando duas classes com Annotations, sendo o que o relacionamendo entre essas duas classes é de muitos para muitos.

Por exemplo, tenho duas tabelas tab1 e tab2 e tenho uma tabela intermediária tab1_rel_tab2.

Estou mapeando as classes dessa maneira:

Tab1

public class Tab1 implements Serializable {
   
   @ManyToMany( targetEntity = Tab2.class)
   @JoinTable( 
      name = "tab1_rel_tab2", 
      joinColumn = @JoinColumn( name = "id_tab1" ),
      inverserJoinColumns = @JoinColumn( name = "id_tab2" )
   }
   private Collection<Tab2> tab2s;
}

Tab2

public class Tab2 implements Serializable {
   
   @ManyToMany( mappedBy = "tab2s", targetEntity = Tab1.class)
   private Collection<Tab1> tab2s;
}

Sendo que quando eu faço a consulta assim:

   this.getEntityManager().createQuery( "select object(o) from Tab1");

Desta maneira funciona, mas quando eu mudo a consulta para sql puro:

   this.getEntityManager().createQuery( "select * from tab1 as t1 inner join tab1_rel_tab2 as t1rt2 on (t1.id_tab1 = t1rt2.id_t1) inner join tab2 as t2 on(t1rt2.id_tab2 = t2.id_tab2");

Eu recebo um erro que é este:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to test.Tab1

Porque isso acontece?

Resolvi o problema fazendo a consulta assim:

this.getEntityManager().createNativeQuery("select....", Tab1.class);

Sendo que o hibernate faz duas queries desconsiderando o resultado da primeira query, por exemplo, tenho esta query:

Ela traz todos os resultados que eu preciso, mas o hibernate só utiliza os resultados da tab1 e faz uma outra query assim:

select tab20_.id_tab1 as id1_1_, tab20_.id_tab2 as id2_1_, tab21_.id_tab2 as id1_0_0_, tab21_.nome_disc as nome2_0_0_ from tab1_rel_tab2 tab20_ left outer join tab2 tab21_ on tab20_.id_tab2=tab21_.id_tab2 where tab20_.id_tab1=?
Tem como fazer o hibernate parar de fazer esta segunda consulta?

E Agora eu tenho outro problema, quando eu tento colocar esta query dentro de uma procedure e retornar o resultado das duas tabelas, a classe da segunda tabela não é preenchida por que?