Select em tabela n pra m com hibernate

Galera eu tenho um relacionamento n pra m e usei o hibernate. Ele criou as classes “A”, “B”, “A_has_B” e “A_has_BId”. A insercao eu consegui fazer, agora como que eu faco uma busca?

VLW

Basilio,

Não entendi essas definições que você informou… Você poderia postar aqui as classes e com as devidas anotações para persistência ?

PS.: Quanto mais vc detalhar seu problema mais fácil as pessoas poderão te ajudar…

@braços

Se vc tem uma tabela A e uma tabela B e essas tabelas tem relacionamento n pra m vc terá uma terceira tabela tabelaA_has_tabelaB. O hibernate mapeia essas 3 tebelas em classes, mas cria uma quarta classe com o nome tabelaA_has_tabelaBId. A Classe tabelaA_has_tabelaBId tem os valores das chaves das tabelas A e B, e a classe tabelaA_has_tabelaB tem um objeto da classe tabelaA_has_tabelaBId.

Basilio,

Ok. E como ficaram as anotações em suas classes A e B?

A princípio basta vc escrever uma HQL pra buscar os objetos desejados.


public A getA(Long idA) {

  A a = null;
  EntityManagerFactory emf = Persistence.createEntityManagerFactory("DATASOURCE");
  EntityManager em = emf.createEntityManager();
  EntityTransaction et = null;
  try {
    et = em.getTransaction();
    et.begin();
    StringBuffer sql = new StringBuffer();
    sql.append(" FROM A a ");
    sql.append(" LEFT JOIN FETCH a.listadeBs ");
    sql.append(" WHERE a.idA = :idA ");

    Query q = em.createQuery(sql.toString());
    q.setParameter("idA", idA);
    a = q.getSingleResult();
    et.commit();
  } catch(Exception ex) {
    ex.printStackTrace();
  } finally {
     if (et != null && et.isActive()) {
       et.rollback();
    }
    if (em != null && em.isOpen()) {
      em.close();
    }
  }
  return a;
}

Veja este exemplo, espero que te ajude.

@braços