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?