Prezados, estava eu usando Criteria/JPA com um só critério para Teste da seguinte forma:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(Usuario.class);
Root<Usuario> root = cq.from(Usuario.class);
EntityType<Usuario> modelo = root.getModel();
cq.where(cb.equal(root.get(modelo.getSingularAttribute("login",String.class)),login));
Porém, agora quero fazer com mais de 1 atributo… O que estou fazendo de errado… ??? tem um exemplo na Doc do OpenJPA que mostra como fazer um MetaModel pra poder usar… mas sério, isso é muito sem noção (pelo menos ainda não ví sentido nisso)… Porque que eles não procuram facilitar as coisas… ??? PQP… As vezes irrita…
OpenJPA: http://openjpa.apache.org/builds/latest/docs/manual/jpa_overview_criteria.html (porém tem esse MetaModel que me recuso a fazer)
Não sei mais o que fazer…
Tem um getPluralAttribute() mas me retorna um Set… é ele que tenho que usar ???
Abraços 
No inicio JPA Criteria parece complicado… mas depois que você usa acaba notando que ela é robusta ao invés de complicado.
Mas enfim… você não precisa usar metamodel para fazer criteria de mais de um atributo. O esquema do metamodel é que você possa trabalhar com tipagem ao invés de passar Strings. Um exemplo: no Hibernate Criteria vocẽ pode fazer beetwhen de dois campos String que ele vai aceitar, já no JPA ele só deixara objetos temporais (date, calendar).
O código fica um pouco mais extendo que se você usasse Hibernate Criteria ou JPQL, mas fica bem mais legível.
No seu caso, se vocẽ quer filtrar a consulta por login e grupo, por exemplo, dá para alterar a linha 6 por:
Predicate byLogin = builder.equal(root.get("login"), login);
Predicate byGroup = builder.equal(root.get("group"), group);
c.where(byLogin, byGroup);
Essa criteria do JPA fico uma droga, se foi toda a legibilidade, agora é necessario escrever um codigo sofrivel pra não ganhar nada?
Eu espera algo mais, a do Hibernate é simplista, agora a do JPA eles esquecem de um certo conceito KISS, eu ainda prefiro escreveu meu EJBQL, do que usar essa bagaça ai…
[quote=garcia-jj]No inicio JPA Criteria parece complicado… mas depois que você usa acaba notando que ela é robusta ao invés de complicado.
Mas enfim… você não precisa usar metamodel para fazer criteria de mais de um atributo. O esquema do metamodel é que você possa trabalhar com tipagem ao invés de passar Strings. Um exemplo: no Hibernate Criteria vocẽ pode fazer beetwhen de dois campos String que ele vai aceitar, já no JPA ele só deixara objetos temporais (date, calendar).
O código fica um pouco mais extendo que se você usasse Hibernate Criteria ou JPQL, mas fica bem mais legível.
No seu caso, se vocẽ quer filtrar a consulta por login e grupo, por exemplo, dá para alterar a linha 6 por:
Predicate byLogin = builder.equal(root.get("login"), login);
Predicate byGroup = builder.equal(root.get("group"), group);
c.where(byLogin, byGroup);
[/quote]
Realmente, eu to com a cabeça Web no momento… heueheuehueheueheueehu, com certeza deve ter o seu campo de ação…
garcia-jj vou testar o que você me passou e assim que resolver, posto o resultado aqui…
Só o que eu fiquei fulo da vida é que não achei esse uso do Predicate em lugar nenhum… enfim… vivendo e aprendendo, quem sabe futuramente não começo a gostar do MetaModel… heheh
Valews 8)
Meus amigos, funcionou perfeitamente…
Muito obrigado pelos Helps.
Só uma questão a mais, pra fechar o tópico… tem como ver essa Query no Debug do NB ou através de algum método ??? Ou terei que implementar o Log4J ??
Abs []
A parte de logging da query é feita pelo JPA provider, sendo assim cada um faz de uma forma. Eclipselink usa o java.util.logging, já o Hibernate usa o SLF4J.