Problema com JOINS no JPA2

8 respostas
bruno.neves

Galera estou com um problema pra entender algumas coisas no JOIN do JPA 2.

public void testCriteriaUsuario() {
        em = emf.createEntityManager();

        CriteriaBuilder cb = em.getCriteriaBuilder();

        CriteriaQuery<Usuario> cq = cb.createQuery(Usuario.class);
        
        Root<Usuario> usuario = cq.from(Usuario.class);

        Join<Usuario,Grupo> uj = usuario.join("idGrupo").join("id"); //NÃO ESTOU CONSIGUINDO ENTENDER A STRING DENTRO DO JOIN DEVE ESTAR INCORRETA. COMO SERA QUE É FEITO???
        
        TypedQuery<Usuario> tqq = em.createQuery(cq.multiselect(uj)); //ESTE TAMBEM ESTOU COM PROBLEMA.

        List<Usuario> usuariosCriteria = tqq.getResultList();

        for (Usuario usuario1 : usuariosCriteria) {
            System.out.println(usuario1.getNomeCompleto());
        }
public class Usuario() {
      Integer id;
      String nome;
      String login;
      String senha;
      Grupo grupo;
  }
public class Grupo() {
      Integer id;
      String descricao;
   }

O JOIN acima tem como objetivo fazer o relacionamento entre essas duas classes, alguem poderia como fazer este joins usando Criteria do JPA 2.

Valew por enquanto.

8 Respostas

Lavieri

http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/querycriteria.html#querycriteria-from-join

aqui tem exemplo

usando meta modelos, segue um exemplo que esta no link

CriteriaQuery&lt;Person&gt; personCriteria = builder.createQuery( Person.class );

Root&lt;Person&gt; personRoot = person.from( Person.class );

// Person.address is an embedded attribute

Join&lt;Person,Address&gt; personAddress = personRoot.join( Person_.address );

// Address.country is a ManyToOne

Join&lt;Address,Country&gt; addressCountry = personAddress.join( Address_.country );

para link completo da documentação do Hibernate esta aqui => http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html_single/

bruno.neves

Obrigado pela resposta, porém não gostaria de usar meta modelos, gostaria de um exemplo usando “String” parecido com o exemplo acima que postei no inicio do tópico.
Estou usando JPA2 puro com TopLink.

Obrigado;

Lavieri
Join&lt;Usuario,Grupo&gt; uj = usuario.join("idGrupo").join("id"); //NÃO ESTOU CONSIGUINDO ENTENDER A STRING DENTRO DO JOIN DEVE ESTAR INCORRETA. COMO SERA QUE É FEITO???

altera para

Join&lt;Usuario,Grupo&gt; uj = usuario.join&lt;Grupo&gt;("grupo"); //a string dentro é o nome da propriedade relativa a ligação com o grupo

...................

Para ficar claro como colocar o parametro dentro do join, segue um exemplo com nome diferente

por exemplo se sua entidade fosse assim

class Usuario {
   Grupo caraminholas;
}

//então no seu join deveria ser assim

Join&lt;Usuario,Grupo&gt; uj = usuario.join&lt;Grupo&gt;("caraminholas");
bruno.neves
CriteriaBuilder cb = em.getCriteriaBuilder();

        CriteriaQuery<String> cq = cb.createQuery(String.class);
        Root<Usuario> usuario = cq.from(Usuario.class);
        Join<Usuario, Grupo> grupo = usuario.join<Grupo>("grupo"); // Está dando erro nesta linha, o erro é referente ao generico <Grupo> no join.

Obrigado pela ajuda…se souber o porque do erro agradeço.

bruno.neves

Cara não querendo ser chato…mas você poderia postar um exemplo completo retornando o select do join em uma lista, andei procurando na net, porem existe pouco material sobre isso e não consegui resolver esse problema.

Obrigado por enquanto…

Lavieri

bruno.neves:
Cara não querendo ser chato…mas você poderia postar um exemplo completo retornando o select do join em uma lista, andei procurando na net, porem existe pouco material sobre isso e não consegui resolver esse problema.

Obrigado por enquanto…

agora não estou aqui om o JPA2, mas no link que eu coloquei mais acima, tem esse exemplo, entre varios outros… o uso dos meta modelos são iguais ao não uso deles… a única diferença é que vc vai por STRING no lugar do meta modelo…

E

Pessoal eu tambem estou com o mesmo problema do nosso amigo bruno, alguem mais poderia nos ajudar postando um exemplo completo de joins com “String” eu li o link do nosso amigo mais mesmo assim não consegui implementar
OBRIGADO

E

Pessoal . Mais alguem?

Criado 30 de abril de 2010
Ultima resposta 4 de mai. de 2010
Respostas 8
Participantes 3